Поведение assert в Python

Поведение assert в Python

@python_quiz

Разберем этот квиз

Код из квиза:

python

Коротко: при выполнении assert с ложным условием Python немедленно поднимает исключение AssertionError с указанным сообщением, и последующие строки (включая print) не будут выполнены, если исключение не перехвачено.

Разбор кода по шагам

  1. Выполняется присваивание: flag = False.
  2. Выполняется выражение assert flag, 'Ошибка'. Так как flag — False, выполняется генерация исключения AssertionError с аргументом 'Ошибка'.
  3. Исключение прерывает текущий поток выполнения, поэтому print('После assert') не выполняется, если только исключение не поймано блоком try/except выше по стеку.

Демонстрация: что увидите в интерпретаторе

Пример с обычным запуском (ничего не перехватывается):

python

При запуске вы получите трассировку и сообщение типа:

Строка "После assert" не будет выведена.

Если нужно обработать ошибку и продолжить выполнение, используйте try/except:

python

Вывод:

Анализ вариантов ответов (по смыслу)

  • "Выведет: После assert" — не соответствует реальности. При ложном условии assert прерывает выполнение до print.
  • "Ничего не выведет, завершится без ошибки" — неверно. Будет выброшен AssertionError, т.е. программа завершится с ошибкой, а не спокойно.
  • "Поднимет AssertionError до print" — соответствует: исключение возникнет до выполнения print, и управление до print не дойдет.
  • "Поднимет SyntaxError при выполнении assert" — неверно. assert — корректный синтаксис; при ложном условии поднимается AssertionError, а не SyntaxError.

Дополнительные замечания и рекомендации

  • assert — это оператор для отладки и самопроверок; в оптимизированном режиме Python (флаг -O) утверждения могут быть удалены интерпретатором, поэтому нельзя полагаться на assert для проверки внешних данных в production-коде.
  • Для проверки входных данных и управления ошибками в продакшн-коде используйте явные проверки и бросайте подходящие исключения (ValueError, TypeError и т. п.), либо обрабатывайте ситуации через raise.

Вывод

assert с ложным условием приводит к поднятию AssertionError с указанным сообщением и прерывает дальнейшее выполнение кода, если только исключение не перехвачено. Для надежных проверок в рабочем коде лучше использовать явные механизмы валидации и обработки ошибок.

Report Page