Я использую mypy в моем проекте Python для проверки типов. Я также использую 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

В моей системе CLoader и CDumper отсутствуют, что приводит к ошибкам error: Модуль 'yaml' не имеет атрибута 'CLoader' иошибка: модуль 'yaml' не имеет атрибута '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

Pridkett

Ответов: 3

Ответы (3)

Вы можете игнорировать ошибки типа с помощью # type: ignore с версии 0.2 (см. Проблему # 500, игнорировать определенные строки):

PEP 484 использует # type: ignore для игнорирование ошибок типа в определенных строках ...

Также, используя # type: ignore близко к началу файла [пропускает], проверка этого файла полностью.

Источник: mypy # 500

Также # mypy: ignore-errors в верхней части файла, который вы хотите игнорировать, все работы, если вы используете shebang и строки кодирования должны быть такими:

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

Комментарий Gvanrossum

Конечно, ответ на этот вопрос - добавить # type: ignore в конце строки, чтобы mypy игнорировал его.

Когда я был в Google, чтобы узнать, как игнорировать файлы для миграции django,
этот вопрос мне рекомендовали несколько раз.

Поэтому я отправляю ответ о том, как игнорировать миграции Django:

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

А для mypy> = 0.910 поддерживается pyproject.toml, который можно задать следующим образом:

[tool.mypy]
python_version = 3.8
ignore_missing_imports = true

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

2022 WebDevInsider