Что означает ошибка AssertionError в Python

Самая необычная ошибка, которую мы вызываем сами

Что означает ошибка AssertionError в Python

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

Ситуация: вы пишете код на Python и решаете добавить проверки для отлавливания ошибок. Например, хотите убедиться, что переменная x равна 10, и если это не так — программа должна сообщить об ошибке. Для этого используете оператор assert:

x = 5
assert x == 10, "x должен быть равен 10"

И при запуске предсказуемо получаете ошибку:

❌ AssertionError: x должен быть равен 10

Что это значит: AssertionError возникает, когда проверка с помощью assert не проходит. Встроенный оператор assert работает так:

  • Если условие истинно — программа продолжает работу.
  • Если условие ложно — Python останавливает выполнение и выводит AssertionError с вашим сообщением (если оно указано).

В примере выше x равен 5, а не 10, поэтому assert срабатывает и вызывает ошибку.

Когда и зачем используют assert. Этот оператор полезен для:

  • Отладки — быстрой проверки предположений в коде.
  • Тестирования — например, в unit-тестах (хотя для сложных тестов лучше использовать unittest или pytest).
  • Валидации входных данных (но в продакшене assert лучше заменять на явные проверки, так как его можно отключить флагом -O).

Что делать с ошибкой AssertionError?

На секунду забудем о том, что сами спровоцировали эту ошибку. Чтобы исправить AssertionError, есть два подхода.

1. Исправить условие, чтобы оно соответствовало реальности. Если x действительно должен быть 10, но в коде ошибка — значит, надо исправить значение:

x = 10 # Теперь проверка пройдёт
assert x == 10, "x должен быть равен 10"

2. Изменить саму проверку. Если условие слишком строгое, его можно ослабить. Например:

x = 5
assert x > 0, "x должен быть положительным" # Теперь ошибки не будет

Пример из реальной практики

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

def divide(a, b):
    assert b != 0, "Делитель не может быть нулём!"
    return a / b

print(divide(10, 0)) # Вызовет AssertionError

Как улучшить обработку таких ошибок

Иногда лучше использовать обычное исключение ZeroDivisionError, так как assert можно случайно отключить:

def divide(a, b):
    if b == 0:
        raise ValueError("Делитель не может быть нулём!")
    return a / b

Что в итоге

Выводы будут такие:

  • AssertionError — это сигнал, что ваше предположение в assert оказалось неверным. 
  • Используйте assert для отладки и тестов, но не для критичных проверок в продакшене.
  • Если получаете эту ошибку — либо исправьте данные, либо пересмотрите условие. Либо не используйте assert :)

Вам слово

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

Обложка:

Алексей Сухов

Корректор:

Елена Грицун

Вёрстка:

Кирилл Климентьев

Соцсети:

Юлия Зубарева

Получите ИТ-профессию
В «Яндекс Практикуме» можно стать разработчиком, тестировщиком, аналитиком и менеджером цифровых продуктов. Первая часть обучения всегда бесплатная, чтобы попробовать и найти то, что вам по душе. Дальше — программы трудоустройства.
А вы читали это?
easy
[anycomment]
Exit mobile version