mypy如何忽略源文件中的单行?

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)

格万罗苏姆评论

  • 请注意,这会忽略整个**文件上的**所有**错误,而不仅仅是像OP所询问的那样的单行错误。 (4认同)
  • 这就是为什么我写“全部”,当然这不是像OP想要的那样被接受的答案,而只是对这个线程的补充。如果您想添加答案,请编写编辑或其他答案:) (2认同)

Moi*_*ira 18

你可以做到这一点# type: ignore0.57(这次提交关闭问题#500,忽略特定行):

PEP 484 # type: ignore用于忽略特定行上的类型错误,mypy应该支持它.此外,使用# type: ignore靠近文件顶部应该完全跳过检查该文件.

  • 我的探矿者 linter 需要一定的长度 (5认同)
  • 更具体地说,MyPy 支持使用“type:ignore[code, ...]”指定要忽略的错误代码。请参阅 https://mypy.readthedocs.io/en/stable/error_codes.html?#silencing-errors-based-on-error-codes。在这种情况下,它将是“# type:ignore[attr-defined]”。 (4认同)
  • 知道如何将 # type:ignore 放在上面的行上吗? (3认同)
  • @GregHilston 啊,哎哟。不幸的是我不知道这是否可能[(PEP 484似乎没有列出许多其他选项)](https://www.python.org/dev/peps/pep-0484/#compatibility-with-other -uses-of-function-annotations),尽管可以忽略整个函数([mypy#557](https://github.com/python/mypy/issues/557))。 (2认同)
  • @GregHilston,您可以使用“\\”或括号分割该行,并将注释写入发生 mypy 错误的行。 (2认同)
  • 感谢@GinoMempin,对于其他情况,您可以使用“--show-error-codes”标志运行 mypy 以查看代码 (2认同)

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)


use*_*846 8

我用了

# type: ignore # noqa: F401
Run Code Online (Sandbox Code Playgroud)

忽略给我 F401 错误的一行。我相信您可以将其扩展到其他错误代码


Wak*_*eng 5

我宁愿配置它 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)

  • 请注意,这将忽略*整个文件*和*所有类型的错误*的错误,而不仅仅是*特定行*上的错误(OP最初询问的错误)。 (2认同)