【发布时间】:2023-12-27 22:30:02
【问题描述】:
最近在 PyCharm 中(我不知道是哪个版本开始的,我目前正在运行 2021.2.3 Pro),我收到了没有意义的警告。
比如这个sn-p:
d = {1: 2, 3: 4, 5: 6}
for v in d.values():
print(v)
触发以下警告:
预期类型为 'collections.Iterable',得到的是 'ValuesView'
在上面的 sn-p 中,将 values() 替换为 keys() 会给出类似的警告。
顺便说一句,d.values() 的返回值是 dict_values 而不是 ValuesView:
type(d.values())
<class 'dict_values'>
为什么 PyCharm 给我这个警告,而这一直是迭代字典键/值的正确方法?
这可能是 PyCharm 中的一个错误,但也许我遗漏了一些东西。
编辑:即使https://docs.python.org/3.8/library/stdtypes.html#dict-views 的示例代码也会收到此警告,请参见屏幕截图。
【问题讨论】:
-
对于 PyCharm linter 错误,您真的无能为力。多年来,我已经看到这些错误来来去去,这是 stdlib 中的一个示例,took some time to be fixed 但由于您在循环 dict 的键/值视图中报告的错误是一种非常常见的操作,我猜是下一个PyCharm 版本将发布一个修复程序。唯一可能的结论是知道您的 linter 何时出错并忽略这些错误。如果 PyCharm linter 出错,您可以使用 mypy 仔细检查。