我有一个while循环:
while parent != None:
pathList.append(parentMap[parent])
parent = parentMap[parent]
我想对这个列表做的只是简单地将父值的父值(已经在代码的其他部分中确定)添加到列表中,直到我到达树的顶部,并且不再有父级。while循环的工作原理是,一旦parentMap[parent]被提供了一个无效的[parent]键,它将被赋值为“None”,循环将终止。这不会发生的。相反,一旦我找到了最上面的键(5,5),程序就会抛出一个错误,声明“无效的键”?在
正如其他人所指出的,问题在于如果找不到键,},而是引发一个
dict
不会返回{KeyError
异常(as seen in the documentation)。在为了克服这个问题,您可以使用
defaultdict
fromcollections
并将None
设置为该dict的默认值。我建议您阅读classes documentation。在在这种情况下,您可以使用},而不是将},而缺少的键将返回
parentMap = defaultdict(lambda: None, some_initializer)
或{dict
初始化为parentMap = dict(some_initializer)
或{None
,而不是引发KeyError
异常。在在一个无关的问题中,
None
是一个单例,最好检查item is not None
而不是使用!=
。在我看来,它生成了更清晰的代码。在如果在映射中找不到键,可以使用
get
方法返回默认值:应该可以正常工作
相关问题 更多 >
编程相关推荐