Поведение assert в Python
@python_quizРазберем этот квиз
Код из квиза:

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

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

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

Вывод:

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