【问题标题】:PyCharm type warnings - Iterable vs ValuesView/KeysView/ItemsViewPyCharm 类型警告 - Iterable vs ValuesView/KeysView/ItemsView
【发布时间】: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 仔细检查。

标签: python pycharm warnings


【解决方案1】:

这是 PyCharm 2021.2.3 linter 中已知错误的回归,请参阅 JetBrains 错误跟踪器上的 PY-41457

我在使用之前的 PyCharm 2021.2.2 Pro 版本时不会发生这种情况。

目前的解决方案是在 JetBrains 错误跟踪器上报告回归并等待修复。您的代码没有任何问题。

【讨论】: