python - 为什么当mypy需要类型注解时,stupid annotation会处理错误?

标签 python annotations type-hinting mypy python-typing

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/

相关文章:

python - 如何注释作为类对象(而不是类实例)的类型?

PHP:常量作为函数中的变量

python - 为什么这个 dos 命令在 python 中不起作用?

python - 在 python 中使用生成器循环 n 个元素

Python 3 ftplib错误 "Name or service not known"

java - Jaxb 注释 - 从 xml 元素中提取 xml 值

java - 如何使用 lombok 在 @NonNull 异常中抛出我自己的自定义消息?

python - 解构类型提示

javascript - html 发布形式不同的目的地

spring - 如果我忘记将 Spring SessionStatus 标记为 "Complete"会发生什么?