请仔细观察问题并仔细查看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
我是唯一一个拥有这个的人吗?这是为什么?是否有解决方案使这个警告消失?
我的猜测是提供此警告的分析不够清晰。
的值类型
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 string
s中。
至于如何摆脱警告:Jetbrains Resharper是非常可配置的,我猜pycharm也是如此。这个文档https://www.jetbrains.com/help/pycharm/configuring-inspection-severities.html#severity可能会帮助你配置严重性 - 如果不是我确信Jetbrains的支持是渴望帮助你 - 他们是每当我使用resharper时遇到问题。