How can mypy ignore a single line in a source file?

PythonTypesMypy

Python Problem Overview


I'm using mypy in my python project for type checking. I'm also using PyYAML for reading and writing the project configuration files. Unfortunately, when using the recommended import mechanism from the PyYAML documentation this generates a spurious error in a try/except clause that attempts to import native libraries:

from yaml import load, dump
try:
    from yaml import CLoader as Loader, CDumper as Dumper
except ImportError:
    from yaml import Loader, Dumper

On my system CLoader and CDumper aren't present, which results in the errors error: Module 'yaml' has no attribute 'CLoader' and error: Module 'yaml' has no attribute 'CDumper'.

Is there a way to have mypy ignore errors on this line? I was hoping that I could do something like this to have mypy skip that line:

from yaml import load, dump
try:
    from yaml import CLoader as Loader, CDumper as Dumper  # nomypy
except ImportError:
    from yaml import Loader, Dumper

Python Solutions


Solution 1 - Python

You can ignore type errors with # type: ignore as of version 0.2 (see issue #500, Ignore specific lines):

> PEP 484 uses # type: ignore for ignoring type errors on particular lines ... > >Also, using # type: ignore close to the top of a file [skips] checking that file altogether.
> > Source: mypy#500. See also the mypy documentation.

Solution 2 - Python

Also # mypy: ignore-errors at the top of the file you want to ignore all works, if you are using shebang and coding lines should be like this:

#!/usr/bin/env python 
#-*- coding: utf-8 -*-
# mypy: ignore-errors

Gvanrossum comment

Solution 3 - Python

Of course, the answer of this question is add # type:ignore at the end of the line that want mypy to ignore it.

When I was google for how to ignore the files for django migrations,
this question was recomment to me several times.

So I post an answer about how to ignore Django migrations:

# mypy.ini
[mypy-*.migrations.*]
ignore_errors = True

And for mypy>=0.910, pyproject.toml is supported which can be set as follows:

[tool.mypy]
python_version = 3.8
ignore_missing_imports = true

[[tool.mypy.overrides]]
module = "*.migrations.*"
ignore_errors = true

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionPridkettView Question on Stackoverflow
Solution 1 - PythonSalemView Answer on Stackoverflow
Solution 2 - PythonAlan GarridoView Answer on Stackoverflow
Solution 3 - PythonWaket ZhengView Answer on Stackoverflow