让我们更轻松一点 代码:
level3 = {'a':'aa'}
level2 = {'b':level3, 'd':level3}
level1 = {'j':level2, 'k':level2}
def print_rec(node = None):
if node is None:
node = level1
if node == 'aa':
return
for key, successor in node.items():
print(key,":",node.get(key))
print_rec(successor)
print_rec()
输出:
k : {'d': {'a': 'aa'}, 'b': {'a': 'aa'}}
d : {'a': 'aa'}
a : aa
b : None
Traceback (most recent call last):
File "test.py", line 13, in <module>
print_rec(level1)
File "test.py", line 11, in print_rec
print_rec(node)
File "test.py", line 11, in print_rec
print_rec(node)
File "test.py", line 8, in print_rec
for key in node:
TypeError: 'NoneType' object is not iterable
我认为只有当密钥在节点中时才会执行node = node.get(key)。那么为什么新节点将获得NoneType?任何人都可以提供帮助吗?
答案 0 :(得分:4)
在for循环中,您似乎使用名称node
来表达两个不同的东西:
for key in node:
print(key,":",node.get(key))
node = node.get(key)
print_rec(node)
在第一次迭代中,您更改node
的值。在第二次迭代中,当您执行node.get(key)
时,您使用的是新node
,但您希望使用原始node
。
这应该有所帮助:
for key in node:
print(key,":",node.get(key))
successor = node.get(key)
print_rec(successor)
它可以更简洁地写成:
for key, successor in node.items():
print(key,":",successor)
print_rec(successor)