在 Python 2.7.6 中,对象被视为 NoneType
An object is being treated as NoneType in Python 2.7.6
有一个class Tree234,它只有一个成员_pRoot,它是一个Node类型的对象。这里的Node本身就是一个class.
现在,当我尝试在 Tree234 class 的任何方法中直接使用 _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
[=16 将其分配给 Node 类型对象的事实=]
我花了几个小时才弄明白,但我仍然一点也不知道这里发生了什么。所以决定问问你们。
我知道这里有一些非常愚蠢的东西,导致了问题。但是想不通。
你能找到这里的问题吗?
(添加评论作为答案)
您应该像这样检查 while
子句中的 pCurNode is not None
:while pCurNode:
或 while pCurNode is not None:
这是您的问题。
发生这种情况是因为循环可能不会在叶中退出,并且此语句
else:
pCurNode = self.getNextChild(pCurNode, dValue)
找不到下一个 child。
对于节点可能无法找到任何下一个 child 或 parent 的其他语句类似(因此返回类似 None
的值)。
最后在插入检查之前:
if pCurNode and pCurNode.isLeaf(): # insert data here
有一个class Tree234,它只有一个成员_pRoot,它是一个Node类型的对象。这里的Node本身就是一个class.
现在,当我尝试在 Tree234 class 的任何方法中直接使用 _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
[=16 将其分配给 Node 类型对象的事实=]
我花了几个小时才弄明白,但我仍然一点也不知道这里发生了什么。所以决定问问你们。 我知道这里有一些非常愚蠢的东西,导致了问题。但是想不通。
你能找到这里的问题吗?
(添加评论作为答案)
您应该像这样检查 while
子句中的 pCurNode is not None
:while pCurNode:
或 while pCurNode is not None:
这是您的问题。
发生这种情况是因为循环可能不会在叶中退出,并且此语句
else:
pCurNode = self.getNextChild(pCurNode, dValue)
找不到下一个 child。
对于节点可能无法找到任何下一个 child 或 parent 的其他语句类似(因此返回类似 None
的值)。
最后在插入检查之前:
if pCurNode and pCurNode.isLeaf(): # insert data here