我一直在寻找NoneType半天。我通过生成由t2表示的Object来放置'print'和dir()。我使用'post mortem'查看崩溃后的数据结构,无处可找到NoneType。 我想知道是否这是由代码的其他部分(一厢情愿的想法)启动的那些错误之一,我想知道是否有人认识到这一点? (k2是'int')
File "C:\Python26\Code\OO.py", line 48, in removeSubtreeFromTree
assert getattr(parent, branch) is subtreenode
TypeError: getattr(): attribute name must be string, not 'NoneType
File "C:\Python26\Code\OO.py", line 94, in theSwapper
st2, p2, b2 = self.removeSubtreeFromTree(t2, k2)
TypeError: 'NoneType' object is not iterable
答案 0 :(得分:5)
NoneType
是None
对象的类型。因此,在第一个错误中,branch
为None
。第二个错误在没有看到源代码的情况下更难诊断,但建议在t2
中的某个地方,数据结构并不完全如您所愿。
当我遇到这种情况时,我通常会发现我忘记用return
语句结束我的一个函数。没有显式返回的函数将返回None
。
答案 1 :(得分:2)
出于某种原因,在断言行处,branch
的值为 None
。
如果你的第二个异常是分开的,那么最有可能发生的是方法调用self.removeSubtreeFromTree()
返回None,而不是序列(如元组),所以当Python试图将它解压缩到变量中时,它失败了。
答案 2 :(得分:1)
我同意Managu的说法,你很可能忘记从函数中返回一个值。我一直这样做。
作为另一种可能性,我认为你正在编写某种树数据结构。您是否有可能使用None来表示“此节点没有子节点”并且您没有正确处理该情况?
答案 3 :(得分:0)
另一个得到我的是就地函数,比如list.append()(在函数调用中不能使用它,list.append()返回None并更改变量)。
我花了一天半的时间来追逐那个虫子......