如何解决Python中NoneType对象无__getitem__属性的类型错误
解决
TypeError: 'NoneType' object has no attribute '__getitem__' 问题 咱们先把问题拆明白:你遇到的这个错误,本质是clusters变量的值是None,但你却想用clusters[cluster]去索引它——就像你想从一个空盒子里拿东西,肯定拿不到对吧?
核心原因
问题出在cluster_sentences(sentences, nclusters)这个函数上:它没有返回你预期的聚类结果,反而返回了None。当你在循环里尝试用clusters[cluster]访问元素时,自然就触发了类型错误。
一步步排查修复
检查
cluster_sentences函数的实现
这是最关键的一步:- 先看函数里有没有
return语句?如果完全没写return,Python函数默认会返回None,这就是问题的根源。 - 如果有
return语句,确认它返回的结构是不是你要的——比如你是不是期望它返回一个列表,每个元素对应一个聚类的句子集合(类似[[句子1,句子2], [句子3], [句子4,句子5]]这种结构)?如果返回的是别的格式,或者逻辑出错导致没生成有效结果,也会返回None。
- 先看函数里有没有
给
clusters加个前置校验
在使用clusters之前先判断它是否有效,避免直接报错:if __name__ == "__main__": sent = open('/Desktop/word2vec_original/input.txt', 'r').read() sentences = sent_tokenize(sent) nclusters = 3 clusters = cluster_sentences(sentences, nclusters) # 先确认聚类结果有效 if clusters is None or len(clusters) != nclusters: print("警告:聚类函数未返回有效结果,请检查cluster_sentences的实现!") else: for cluster in range(nclusters): for i, sentence in enumerate(clusters[cluster]): # 这里写你的后续处理逻辑 pass验证输入数据是否正常
也有可能是输入的句子列表有问题:比如input.txt是空的,或者sent_tokenize没正确分割出句子,导致sentences是空列表,聚类函数没法正常工作才返回None。你可以加一行打印验证:print(f"成功分割出{len(sentences)}个句子")
额外小提示
如果cluster_sentences是你自己写的函数,建议在函数里加一些调试打印,比如在聚类完成后打印一下生成的结果结构,看看是不是符合你后续访问的要求。这样能快速定位是哪一步出了问题。
内容的提问来源于stack exchange,提问作者Swathi Krishna
相关产品推荐
相关产品推荐

