2026, Jan 03 09:02

Подавление предупреждений в ty: ty: ignore, type: ignore и ignore[rule]

Как подавлять предупреждения проверщика типов ty: # ty: ignore и # type: ignore, выбор правил ty: ignore[rule] и отключение файла в проектах на Python.

Инструменты на стадии предпросмотра удобны для экспериментов, но порой «ругаются» на то, что на деле работает нормально. Статический проверщик типов ty от Astral — не исключение: пока он дозревает, возможны ложные срабатывания или конструкции, которые ещё не поддерживаются (например, перечисления). В таких ситуациях полезно точечно приглушать отдельные диагностики, не отключая проверку типов целиком.

Минимальный пример проблемы

Ниже функция аннотирована как возвращающая str, но фактически отдаёт int — проверщик типов это отметит. Иногда, при поэтапном внедрении, удобнее продолжить работу и явно зафиксировать такое расхождение.

def to_text(n: int) -> str:
    return n

Почему возникает предупреждение

Аннотация обещает строку, а реализация возвращает число. Проверщик вроде ty как раз и создан, чтобы находить такие несоответствия. Когда имеете дело с временными пробелами в поддержке или известными ложными срабатываниями, намеренное подавление конкретного сообщения — самый чистый способ двигаться дальше и при этом сохранять полезные сигналы из остального кода.

Подавление на одной строке

Чтобы заглушить все типовые замечания для конкретного выражения или возврата, добавьте директиву подавления в конец строки. Специальный вариант для ty удобен именно для его ложных срабатываний.

def labelize(value: int) -> str:
    return value  # ty: ignore

Можно воспользоваться и кросс-инструментальной формой, которую понимают другие проверщики (например, mypy).

def labelize(value: int) -> str:
    return value  # type: ignore

Подавление только конкретных правил

Если диагностическое сообщение уместно, но вы хотите зафиксировать, что конкретное известное правило здесь неприменимо, укажите его точно. Так проверка остальных частей строки сохранится, и вы не спрячете несвязанные проблемы.

mixed = 42 + "chunk"  # ty: ignore[unsupported-operator]

Можно перечислить несколько правил, чтобы в одном месте охватить все осознанные исключения.

sum_three("one", 5)  # ty: ignore[missing-argument, invalid-argument-type]

Для одиночного случая с одним правилом этот формат тоже подходит:

quot = 1 / 0  # ty: ignore[division-by-zero]

Полностью заглушить файл

В редких случаях — например, на переходном этапе — можно заглушить весь модуль. Директива в начале файла отключит сообщения о типовых ошибках в нём.

# type: ignore

def alpha(a: int) -> str:
    return a

def beta(b: str) -> int:
    return b

Почему это важно

Точечное подавление помогает без лишнего трения внедрять ty. Вы сохраняете пользу статического анализа там, где он точен, изолируете известные ложные срабатывания и не тонете в шуме, пока инструмент развивается. Это особенно важно, когда отдельные языковые возможности ещё не поддерживаются, но вы хотите продолжать проверять остальной код.

Итоги

Выбирайте максимально узкое подавление, которое прозрачно передаёт намерение. Для разового ложного срабатывания используйте построчное # ty: ignore. Если правило известно, указывайте его в виде # ty: ignore[rule-name], чтобы будущие изменения не скрыли новые проблемы. К директиве # type: ignore на уровне файла обращайтесь только тогда, когда сознательно отключаете проверки для всего модуля. Эти приёмы позволяют просто балансировать строгость и прагматичность при работе с ty.