Pri*_*ett 17 python types mypy
我在我的python项目中使用mypy进行类型检查.我也使用PyYAML来读取和编写项目配置文件.不幸的是,当使用PyYAML文档中推荐的导入机制时,这会在尝试导入本机库的try/except子句中生成虚假错误:
from yaml import load, dump
try:
from yaml import CLoader as Loader, CDumper as Dumper
except ImportError:
from yaml import Loader, Dumper
Run Code Online (Sandbox Code Playgroud)
在我的系统上CLoader并且CDumper不存在,这导致错误error: Module 'yaml' has no attribute 'CLoader'和error: Module 'yaml' has no attribute 'CDumper'.
有没有办法让mypy忽略这一行的错误?我希望我可以做这样的事情让mypy跳过这一行:
from yaml import load, dump
try:
from yaml import CLoader as Loader, CDumper as Dumper # nomypy
except ImportError:
from yaml import Loader, Dumper
Run Code Online (Sandbox Code Playgroud)
Ala*_*ido 20
同样# mypy: ignore-errors在文件顶部,您要忽略所有作品,如果您使用的是shebang,并且编码行应该是这样的:
#!/usr/bin/env python
#-*- coding: utf-8 -*-
# mypy: ignore-errors
Run Code Online (Sandbox Code Playgroud)
Moi*_*ira 18
你可以做到这一点# type: ignore为0.57(这次提交关闭问题#500,忽略特定行):
PEP 484
# type: ignore用于忽略特定行上的类型错误,mypy应该支持它.此外,使用# type: ignore靠近文件顶部应该完全跳过检查该文件.
Abh*_*kar 13
请注意,# type: ignore将忽略所有错误。如果您不希望出现这种情况,请仅忽略特定的错误代码。
例子:
def knows(a: int, b: int) -> bool: # type: ignore[empty-body]
pass
Run Code Online (Sandbox Code Playgroud)
上面忽略了empty-bodyfunction 的错误代码knows。如果您想忽略整个文件的特定错误,请将以下内容放在文件顶部、导入之后:
# mypy: disable-error-code="empty-body"
Run Code Online (Sandbox Code Playgroud)
我用了
# type: ignore # noqa: F401
Run Code Online (Sandbox Code Playgroud)
忽略给我 F401 错误的一行。我相信您可以将其扩展到其他错误代码
我宁愿配置它 mypy.ini
例如,要忽略 Django 迁移:
[mypy-*.migrations.*]
ignore_errors = True
Run Code Online (Sandbox Code Playgroud)
而对于mypy>=0.910,支持pyproject.toml,可以设置如下:
[tool.mypy]
python_version = 3.8
ignore_missing_imports = true
[[tool.mypy.overrides]]
module = "*.migrations.*"
ignore_errors = true
Run Code Online (Sandbox Code Playgroud)