Python:NoneType错误,您熟悉吗?

0 投票
4 回答
990 浏览
提问于 2025-04-15 14:14

我花了半天时间在找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

NoneTypeNone 这个对象的类型。所以,在第一个错误中,branch 的值是 None。第二个错误就比较难判断了,因为没有看到源代码,但它提示在 t2 的某个地方,数据结构可能和你想的并不一样。

当我遇到这种情况时,通常发现是我忘记在某个函数的最后加上 return 语句了。没有明确返回值的函数会默认返回 None

撰写回答