【问题标题】:Why is this warning "Expected type 'int' (matched generic type '_T'), got 'Dict[str, None]' instead"?为什么这个警告“预期类型'int'(匹配泛型类型'_T'),得到'Dict [str,None]'”?
【发布时间】:2018-06-16 09:33:36
【问题描述】:

请仔细看问题,仔细看this and you'll see it's not a duplicate的答案,特别是因为他们不回答我的问题。

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

game_data = {'boats': [], }
game_data['boats'].append({'name': None})

现在改成:

game_data = {'boats': [], 'width': None, 'height': None, }
game_data['boats'].append({'name': None})

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

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

现在你会得到:

Expected type 'int' (matched generic type '_T'), got 'Dict[str, None]' instead

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

【问题讨论】:

  • 不在 VS 2017 python 3.6 上不在 pyfiddle.io 中,也许是 pycharm 专业?
  • 我同意。我在 Visual Studio Code 中也没有任何警告。必须是 PyCharm。
  • 请仔细看问题并仔细回答您认为重复的内容,您会改变主意
  • 我没有任何建议。我有时使用 VS2017,对于简单的东西甚至 pyfiddle.io。我不赞同任何事情。使用适合您的任何东西 - 我只是观察到,对于您发布的相同代码块,我在任何 IDE I 使用中都没有收到警告,因此它们可能依赖于 IDE。我将查看另一篇我认为重复的帖子,请稍等。

标签: python pycharm


【解决方案1】:

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

的值类型
game_data = {'boats': [], 'width': None, 'height': None} 

无法确定。

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

w = 12
game_data = {'boats': [], 'width': None, 'height': w}

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

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

game_data['boats'].append({'name': None})

所以现在它有一个 dict(string->int) 突然变成一个混合的东西并警告你。

这与 What does this warning in PyCharm mean? 的含义大致相同:使用 pycharm 作为 IDE 将 int 添加到 list of strings 中。

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

【讨论】:

  • 我更喜欢在引起警告的行上方添加一个“# noinspection PyTypeChecker”,这使得下一个阅读代码的人清楚地知道这是已知的并且应该被忽略。
  • 您也可以通过添加类似game_data: dict[str, Any]的提示来解决它
猜你喜欢
  • 2020-02-09
  • 2016-01-27
  • 1970-01-01
  • 1970-01-01
  • 2018-03-28
  • 1970-01-01
  • 2020-07-21
  • 2013-03-11
  • 1970-01-01
相关资源
最近更新 更多