为什么当mypy需要类型注释时,愚蠢的注释会处理错误?

问题描述 投票:1回答:1

Mypy在这一行上出错了:

response = {'available_fields': []}

error: Need type annotation for 'response'

当我添加愚蠢的注释,响应是一个字典时,错误消失:

response: typing.Dict = {'available_fields': []}

所以,我对此有一些疑问。为什么愚蠢的注释处理错误?如何调整mypy(配置,选项等)不要担心没有注释的这一行?

python annotations typing mypy
1个回答
1
投票

问题是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

© www.soinside.com 2019 - 2024. All rights reserved.