访问python字典时出错

时间:2015-03-09 13:16:26

标签: python dictionary

我很确定我的错误是一个非常小而且愚蠢的事情,但我无法看到它! :(

我有一个已定义的字典: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

2 个答案:

答案 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'来自上一次迭代,它没有问题。)