Выражение
Использование
Безопасной альтернативой является замена
assert
в Python, удобное для отладки и проверок, имеет скрытую особенность: его выполнение зависит от флага оптимизации -O
интерпретатора. При запуске с этим флагом или установке переменной окружения PYTHONOPTIMIZE
, все assert
игнорируются, что может привести к неожиданному поведению программы. Изображение носит иллюстративный характер
AssertionError
, вызываемая при ложном условии в assert
, не несёт семантической информации, усложняя отладку. В оптимизированном режиме игнорируются не только проверки, но и любые побочные эффекты внутри assert
, например, логирование. Использование
assert
для утверждения типов, валидации данных или в качестве части основной логики может привести к проблемам в production-среде, где часто используется флаг -O
. Код, корректно работающий в development, может неожиданно сломаться. Безопасной альтернативой является замена
assert
на явные исключения, такие как ValueError
или пользовательские типы исключений с информативными сообщениями. Для автоматического обнаружения и предотвращения использования assert
рекомендуется применять линтеры, например, ruff
, которые содержат правила, выявляющие такие конструкции.