Python:NoneType错误,您熟悉吗?
我花了半天时间在找NoneType(空类型)。我在生成t2这个对象的过程中到处加了'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
4 个回答
1
我同意Managu的看法,你很可能忘记在函数里返回一个值。我经常会犯这个错误。
另外一种可能性是,我猜你在写某种树形数据结构。你有没有可能用None来表示“这个节点没有子节点”,但你没有正确处理这种情况呢?
2
出于某种原因,在断言那一行的时候,branch
的值是None
。
如果你的第二个异常是单独的,那么很可能是因为方法调用self.removeSubtreeFromTree()
返回了None,而不是一个序列(比如一个元组)。这样,当Python尝试把它拆分到变量里时,就会出错。
5
NoneType
是 None
这个对象的类型。所以,在第一个错误中,branch
的值是 None
。第二个错误就比较难判断了,因为没有看到源代码,但它提示在 t2
的某个地方,数据结构可能和你想的并不一样。
当我遇到这种情况时,通常发现是我忘记在某个函数的最后加上 return
语句了。没有明确返回值的函数会默认返回 None
。