跳到内容

dict-iter-missing-items (PLE1141)

源自 Pylint 代码检查工具。

修复总是可用的。

此规则不稳定且处于预览状态。使用需要 --preview 标志。

作用

检查 for 循环中缺少调用 .items() 的字典解包。

为什么这不好?

当在 for 循环中迭代字典时,如果字典在未调用 .items() 的情况下被解包,如果键不是包含两个元素的元组,则可能会导致运行时错误。

您很可能正在寻找对(键,值)对的迭代,这只有在调用 .items() 时才能实现。

示例

data = {"Paris": 2_165_423, "New York City": 8_804_190, "Tokyo": 13_988_129}

for city, population in data:
    print(f"{city} has population {population}.")

建议改为

data = {"Paris": 2_165_423, "New York City": 8_804_190, "Tokyo": 13_988_129}

for city, population in data.items():
    print(f"{city} has population {population}.")

已知问题

如果字典的键是一个元组,例如:

d = {(1, 2): 3, (3, 4): 5}
for x, y in d:
    print(x, y)

元组键会被解包到 xy 中,而不是键和值。这意味着使用 d.items() 的建议修复会导致不同的运行时行为。 Ruff 无法一致地推断字典键的类型。

修复安全性

由于元组键的已知问题,此修复是不安全的。