首页 > 解决方案 > 为什么当 mypy 需要类型注释时,愚蠢的注释会处理错误?

问题描述

Mypy 在这一行出错:

response = {'available_fields': []}

error: Need type annotation for 'response'

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

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

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

标签: pythonannotationstype-hintingmypypython-typing

解决方案


问题是 mypy 不知道您的列表应该包含什么。它是一个字符串列表吗?整数列表?还有什么?

当你做类似...

response: Dict = {'foo': []}

Any...mypy 将使用动态类型自动填充 dict 缺少的类型参数。所以,上面的声明完全等同于做:

response: Dict[Any, Any] = {'foo': []}

也就是说,您的键实际上可以是任何东西(不仅仅是一个字符串),值也可以是任何东西(不仅仅是一个列表)。


在您的情况下,您可能应该(a)在注释中填写预期的键和值类型:

# For example:
response: Dict[str, List[str]] = {'foo': []}

...或 (b),如果您的 dict 更复杂,请使用TypedDict 。


如果您希望 mypy 禁止您在泛型类型中省略参数(例如,禁止只做response: Dict = ...),请使用--disallow-any-generics命令行标志。如果您不想在每次运行mypy .


推荐阅读