python - 对象在 Python 2.7.6 中被视为 NoneType

标签 python object nonetype

有一个类Tree234,它只有一个成员_pRoot,它是一个Node类型的对象。这里的Node本身就是一个类。

现在,当我尝试在 Tree234 类的任何方法中直接使用 _pRoot 时,它可以正常工作。但是,当我尝试通过将其等同于 _pRoot 的临时变量来使用它时,它不起作用。

下面是相关的代码:

class Tree234:
    #_pRoot = None

    def __init__(self):
        self._pRoot = Node()

    def find(self, key):
        pass

    def insert(self, dValue):
        pCurNode = self._pRoot
        pTempItem = DataItem(dValue)

        while True:
            if pCurNode.isFull():
                self.split(pCurNode)
                pCurNode = pCurNode.getParent()
                pCurNode = self.getNextChild(pCurNode, dValue)

            elif pCurNode.isLeaf():
                break

            else:
                pCurNode = self.getNextChild(pCurNode, dValue)
        pCurNode.insertItem(pTempItem)

insert() 中的第一条语句没有做它应该做的事情。当控件到达 while 循环中的第一条语句时,我遇到了以下错误:

AttributeError: 'NoneType' object has no attribute 'isFull'

如果我只是用这个替换 while 循环中的第一条语句(只是为了测试):

if self._pRoot.isFull():

它接受属性并向前移动(为其他此类语句引发相同的错误,例如此处的 elif 条件中的错误)

所以这里很明显 pCurNode 被视为 None 类型,而不是我使用语句 pCurNode = self._pRoot 将它分配给 Node 类型对象这一事实>

我已经花了几个小时才弄明白,但我仍然一点也不知道这里发生了什么。所以决定问问你们。 我知道这里有一些非常愚蠢的东西,导致了问题。但是想不通。

你能找到这里的问题吗?

最佳答案

(添加评论作为答案)

您应该检查 while 子句中的 pCurNode 是否为 None,如下所示:while pCurNode:while pCurNode is not无: 这是你的问题。

发生这种情况是因为循环可能不会在叶子中退出,而这个语句

else:
   pCurNode = self.getNextChild(pCurNode, dValue) 

可能找不到下一个 child 。

对于节点可能无法找到任何下一个子节点或父节点的其他语句(因此返回类似 None 的值)。

最后在插入这样的支票之前:

if pCurNode and pCurNode.isLeaf():  # insert data here

关于python - 对象在 Python 2.7.6 中被视为 NoneType,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29987567/

相关文章:

python - 简单的python mvc框架

python - 如何使用正则表达式搜索包含字符字母和特殊字符(例如 - ,())的字符串

python - 打开文件 tokenizer.dat 时出现 FREELING 错误

Python 字典 : the size affects timing?

c# - 将JSON转换为C#对象格式的在线工具

Python: "if i.find(' a') ['id' ] is not None :"returns TypeError ' NoneType' 对象不可下标,但 print() 返回一个值

python - 在python-opencv中打印读取图像的像素值时出现错误,TypeError: 'NoneType'对象没有属性 '__getitem__'

actionscript-3 - 提供的 DisplayObject 必须是调用者的子对象

javascript - 在 JavaScript 中过滤 JSON 对象列表的最高性能方法是什么?

将字符串 "None"转换为适当的 None 的 Pythonic 方法