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 .您还可以将此选项添加到 config file ,如果你不想每次运行 mypy 时都输入标志。
关于python - 为什么当mypy需要类型注解时,stupid annotation会处理错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54923253/