san*_*ash 4 python annotations type-hinting mypy python-typing
Mypy 在这一行出错:
response = {'available_fields': []}
error: Need type annotation for 'response'
Run Code Online (Sandbox Code Playgroud)
当我添加响应是字典的愚蠢注释时,错误消失了:
response: typing.Dict = {'available_fields': []}
Run Code Online (Sandbox Code Playgroud)
所以,我对此有一些疑问。为什么愚蠢的注释会处理错误?如何调整 mypy(配置、选项等)而不担心没有注释的这一行?
问题是 mypy 不知道你的列表应该包含什么。它是一个字符串列表吗?整数列表?还有别的事吗?
当你做类似的事情时...
response: Dict = {'foo': []}
Run Code Online (Sandbox Code Playgroud)
Any...mypy 将自动使用动态类型来填充 dict 缺少的类型参数。所以,上面的声明完全等同于:
response: Dict[Any, Any] = {'foo': []}
Run Code Online (Sandbox Code Playgroud)
也就是说,你的键实际上可以是任何东西(不仅仅是字符串),值也可以是任何东西(不仅仅是列表)。
在您的情况下,您可能应该 (a) 在注释中填写预期的键和值类型:
# For example:
response: Dict[str, List[str]] = {'foo': []}
Run Code Online (Sandbox Code Playgroud)
...或者 (b),如果您的字典更复杂,请使用TypedDict 。
如果您希望 mypy 禁止您省略泛型类型中的参数(例如禁止仅执行response: Dict = ...),请使用--disallow-any-generics命令行标志。如果您不想每次运行 mypy 时都键入该标志,您也可以将此选项添加到配置文件中。
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           10239 次  |  
        
|   最近记录:  |