python - 为什么当 mypy 需要类型注释时,愚蠢的注释会处理错误?
问题描述
Mypy 在这一行出错:
response = {'available_fields': []}
error: Need type annotation for 'response'
当我添加响应是字典的愚蠢注释时,错误消失了:
response: typing.Dict = {'available_fields': []}
所以,我对此有一些疑问。为什么愚蠢的注释会处理错误?如何调整 mypy(配置、选项等)不用担心没有注释的这一行?
解决方案
问题是 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 .
推荐阅读
- c++ - libusb 在不中断流的情况下发送控制传输
- python - 为什么 skimage 旋转函数接收插值方法作为参数?
- c# - 将包含 DataSet 的 Object (var) 转换为实际的 DataSet
- c++ - 使用 std::map::extract 修改密钥
- javascript - 压缩字符串的算法
- c++ - 如何从传感器(RFID)获取原始数据?
- docker - 如果我运行 `docker run -i` 而不是 `docker run -it` 会发生什么
- javascript - 清除柏树测试中的日期字段
- sql - SELECT vs UPDATE,使用 ABS 函数时出现意外舍入
- java - RichTextFX 注释和属性正则表达式