python - "k in d"怎么可能是 False,而 "k in d.keys()"是 True?

标签 python dictionary python-2.x

我有一些 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/

相关文章:

python - 按 "pip install --upgrade"升级 pip 和 scrapy 后出现 pip 错误

python - 为什么指定局部变量时 Python 3 exec() 会失败?

python - 如何对字典进行子类化,使其支持通用类型提示?

dictionary - 为什么http.Header中slice的长度返回0?

java - 将映射中的条目与对象进行比较

python、unix、NameError : name not defined. 无法识别字符串变量

带有类似 bash 界面的 python 提示符

python - 使用 Python 将具有参数限制的积分函数拟合到数据(德拜模型)

python - 元类的继承

python - 提取图像中的车牌号