node_name
是一个字符串。难道这不会返回node_list字典中的键列表,可以迭代吗?为什么错误说它不可迭代?
class Graph:
def __init__(self):
self.node_list = {}
self.number = 0
def node(self, node_name):
if node_name in self.node_list.keys:
...
File "PythonProject2.3.py", line 10, in node
if node_name in self.node_list.keys: #returns list of keys
TypeError: argument of type 'builtin_function_or_method' is not iterable
答案 0 :(得分:10)
.keys
是一个函数,而不是属性。试试这个:
if node_name in self.node_list.keys():
默认情况下,字典会对其键进行迭代,因此这也可以使用:
if node_name in self.node_list:
答案 1 :(得分:0)
请更改
if node_name in self.node_list.keys():
到
if self.node_list.has_key(node_name):
答案 2 :(得分:0)
Python看到node_name in self.node_list.keys
,因此它求self.node_list.keys
的值,然后尝试计算出是否node_name
是其结果。
self.node_list.keys
是一个函数(您应该已经编写了keys()
),但此处真正相关的是它不支持Python in
运算符。也就是说,您无法测试self.node_list.keys
中是否有东西。
您特别会发现有关迭代的错误的原因是,Python首先检查__contains__
函数,如果不存在该函数,则尝试遍历in
的右侧操作数,比较每个值使用==
对左操作数。这将失败,因此您看到了异常。 Python这样做的原因仅仅是为了使任何支持迭代的事物也自动支持in
。也许效率不是很高。