我很确定我的错误是一个非常小而且愚蠢的事情,但我无法看到它! :(
我有一个已定义的字典:self.names_to_nodes,我想用我的密钥访问其中一个成员。
这是我的一段代码:
print "Result " + str(len( self.names_to_nodes))
if i in self.names_to_nodes:
print "ESTA"
member = self.names_to_nodes.get(i)
ancestrosA.append(member.get_parent())
我得到了退出并出现此错误:
结果17
ESTA
143 print "ESTA"
144 member = self.names_to_nodes.get(i)
145 ancestrosA.append(member.get_parent())
146 i = member.get_parent()
147 ancestrosA.append(self.founder)
AttributeError:' NoneType'对象没有属性' get_parent'
这怎么可能?
感谢您的帮助!如果密钥在字典中,get(i)如何找不到元素?
BR, Almu
答案 0 :(得分:2)
如果要在检查之前确保它存在,则需要在if语句中移动查找:
if i in self.names_to_nodes:
print "ESTA"
# only does a lookup if the key exists
member = self.names_to_nodes[i]
ancestrosA.append(member.get_parent())
您检查它是否存在,但仍然在if之外检查i
是否存在,您是否总是进行查找。
答案 1 :(得分:1)
dict.get
都会返回一个值。例如:
>>> x = {1:2}
>>> print(x.get(100))
None
尝试使用常规项目访问权限。然后,如果您尝试获取不存在的值,则代码将引发异常。例如:
>>> x = {1:2}
>>> print(x[100])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 100
(读者可能会问,“但i
怎么可能不是字典中的关键字?'ESTA'被打印出来,只有在成员资格测试成功通过时才会出现。”我假设这段代码在for
循环内部,它改变了i
的值,打印的'ESTA'来自上一次迭代,它没有问题。)