Mypy在这一行上出错了:
response = {'available_fields': []}
error: Need type annotation for 'response'
当我添加愚蠢的注释,响应是一个字典时,错误消失:
response: typing.Dict = {'available_fields': []}
所以,我对此有一些疑问。为什么愚蠢的注释处理错误?如何调整mypy(配置,选项等)不要担心没有注释的这一行?
问题是mypy不知道你的列表应该包含什么。它是字符串列表吗?整体列表?别的什么?
当你做某事......
response: Dict = {'foo': []}
... mypy将使用Any
, the dynamic type自动填写dict的缺失类型参数。因此,上述声明完全等同于:
response: Dict[Any, Any] = {'foo': []}
也就是说,你的密钥可以是字面上的任何东西(不仅仅是一个字符串),而且值也可以是任何东西(不仅仅是一个列表)。
在您的情况下,您可能应该(a)在注释中填写预期的键和值类型:
# For example:
response: Dict[str, List[str]] = {'foo': []}
...或(b),如果您的词典更复杂,请使用TypedDict。
如果你希望mypy不允许你省略泛型类型中的参数(例如禁止只做response: Dict = ...
),请使用--disallow-any-generics
command line flag。如果您不想在每次运行mypy时输入标记,也可以将此选项添加到config file。