Я полагаю, что основная причина того, что assert
не используется чаще, состоит в том, что никто не использует "оптимизированный" режим Python .
Утверждения - отличный инструмент для выявления ошибок программирования, для защиты от непредвиденных ситуаций, но вся эта проверка ошибок обходится дорого. В скомпилированных языках, таких как C / C ++, это на самом деле не имеет значения, поскольку утверждения включены только в отладочных сборках и полностью удаляются из сборок выпуска.
В Python, с другой стороны, нет строгого различия между режимами debug и release . Интерпретатор имеет «флаг оптимизации» (-O
), но в настоящее время он фактически не оптимизирует байт-код, а только удаляет утверждения.
Таким образом, большинство пользователей Python просто игнорируют флаг -O
и запускают свои сценарии в «нормальном режиме», который вроде в режиме отладки, поскольку утверждения включены, а __debug__
равно True
, но считается "готовым к производству".
Возможно, было бы разумнее переключить логику, т. Е. «Оптимизировать» по умолчанию и включить утверждения только в явном режиме отладки (*), но я предполагаю, что это смутит многих пользователей, и я сомневаюсь, что мы когда-нибудь увидим такое изменение.
((*) Это, например, то, как это делает Java VM, с помощью переключателя -ea
(включение утверждений).)