我有一些 python 代码抛出 KeyError 异常。到目前为止,我还无法在操作环境之外进行重现,因此我无法在此处发布简化的测试用例。
引发异常的代码正在循环迭代,如下所示:
for k in d.keys():
if condition:
del d[k]
del[k]
行抛出异常。我在它周围添加了一个 try/except
子句,并且能够确定 k in d
是 False,但是 k in d.keys()
为真。
d
的键是旧式类实例的绑定(bind)方法。
该类实现了 __cmp__
和 __hash__
,所以这是我一直关注的地方。
最佳答案
k in d.keys()
将迭代地测试每个键的相等性,而 k in d
使用 __hash__
,因此您的 __hash__
可能被破坏(即它为比较相等的对象返回不同的哈希值)。
关于python - "k in d"怎么可能是 False,而 "k in d.keys()"是 True?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4036114/