为什么这个警告是“预期类型‘int’(匹配泛型类型‘_T’),而是得到‘Dict[str, None]’”?

Oli*_*ons 10 python pycharm

请仔细观看问题并仔细阅读答案,您会发现它不是重复的,尤其是因为他们没有回答我的问题。

尝试创建一个新的空项目,并添加此代码。它工作正常,没有警告:

game_data = {'boats': [], }
game_data['boats'].append({'name': None})
Run Code Online (Sandbox Code Playgroud)

现在将其更改为:

game_data = {'boats': [], 'width': None, 'height': None, }
game_data['boats'].append({'name': None})
Run Code Online (Sandbox Code Playgroud)

仍然没有警告。并再次更改为:

w = 12
game_data = {'boats': [], 'width': None, 'height': w, }
game_data['boats'].append({'name': None})
Run Code Online (Sandbox Code Playgroud)

现在你会得到:

Expected type 'int' (matched generic type '_T'), got 'Dict[str, None]' instead
Run Code Online (Sandbox Code Playgroud)

只有我有这个吗?这是为什么?有没有办法让这个警告消失?

Pat*_*ner 14

我的猜测是给出此警告的分析不够清晰。

值类型为

game_data = {'boats': [], 'width': None, 'height': None} 
Run Code Online (Sandbox Code Playgroud)

无法确定。

您输入的第一个“真实”值是一个 int:

w = 12
game_data = {'boats': [], 'width': None, 'height': w}
Run Code Online (Sandbox Code Playgroud)

所以 PyCharm假设这是一个dict(string->int).

然后你将一个内部字典作为值添加到你的空列表中:

game_data['boats'].append({'name': None})
Run Code Online (Sandbox Code Playgroud)

所以现在它有一个 dict(string->int) 突然变得混合起来并警告你。

这与PyCharm 中的这个警告是什么意思大致相同是关于:使用 pycharm 作为 IDE添加intlist of strings 中。

至于如何摆脱警告:Jetbrains Resharper 是非常可配置的,我猜 pycharm 也是如此。此文档https://www.jetbrains.com/help/pycharm/configuring-inspection-severities.html#severity可能会帮助您配置严重性 - 如果不是,我确信 Jetbrains 的支持很想帮助您 - 他们每当我在使用 resharper 时遇到问题。

  • 我更喜欢在引发警告的行上方添加“# noinspection PyTypeChecker”,这使得下一个阅读代码的人明确知道这是已知的并且应该被忽略。 (8认同)
  • 您还可以通过添加诸如“game_data: dict[str, Any]”之类的提示来解决它 (4认同)