Оператор assert в Python

Оператор assert в Python: что это и как использовать

В Python оператор assert используется для проверки утверждений, которые верны по вашему мнению. Если утверждение верно, то выполнение программы продолжается, если же оно неверно, то генерируется исключение AssertionError.

Основное использование assert

Оператор assert в Python имеет следующий синтаксис:

assert выражение1 [, выражение2]
  • выражение1: Это выражение, которое вы хотите проверить. Если оно возвращает True, то выполнение программы продолжается. Если оно возвращает False, то генерируется исключение AssertionError.
  • выражение2: Это необязательное выражение, которое представляет сообщение об ошибке, которое будет выведено, если выражение1 возвращает False.

Например:

def apply_discount(product, discount):
    price = int(product['price'] * (1.0 - discount))
    assert 0 <= price <= product['price']
    return price

Здесь оператор assert используется для проверки того, что после применения скидки цена продукта не станет отрицательной и не превысит исходную цену.

Как работает assert?

Когда интерпретатор Python встречает оператор assert, он оценивает выражение1. Если выражение1 возвращает True, то выполнение программы продолжается. Если выражение1 возвращает False, то Python генерирует исключение AssertionError.

Если при этом предоставлено выражение2, то его значение используется в качестве сообщения об ошибке.

x = 10
y = 5
assert x < y, "x должно быть меньше y"

В этом примере, поскольку x не меньше y, генерируется исключение AssertionError с сообщением «x должно быть меньше y».

Когда использовать assert?

Оператор assert обычно используется для отладки кода. Он позволяет быстро проверить предположения о вашем коде и выявить ошибки. Вам не следует использовать assert для обработки ошибок в продакшен-коде, поскольку его можно отключить глобально во всем коде, используя ключ -O при запуске программы.

Например, оператор assert может быть полезен при написании тестов:

def test_add():
    assert add(2, 3) == 5

В этом тесте мы используем assert для проверки того, что функция add() правильно работает.

Использование assert в функциях

Оператор assert может быть полезным инструментом при написании функций. Вы можете использовать его для проверки ввода функции или для проверки ее результата. Вот пример использования assert для проверки аргументов функции:

def divide(numerator, denominator):
    assert denominator != 0, "Делитель не может быть равен 0"
    return numerator / denominator

В этом примере, если функция divide() вызывается с denominator равным 0, оператор assert генерирует AssertionError.

Использование assert при написании тестов

Одно из наиболее распространенных применений оператора assert — это написание тестов. Фреймворки для тестирования, такие как unittest и pytest, активно используют assert для проверки того, что код работает правильно. Вот пример теста с использованием assert:

def test_divide():
    assert divide(10, 2) == 5
    assert divide(5, 2) == 2.5
    try:
        divide(10, 0)
    except AssertionError:
        pass
    else:
        assert False, "Деление на ноль должно вызвать ошибку"

В этом тесте мы используем assert, чтобы убедиться, что функция divide() возвращает правильные значения и генерирует ошибку при делении на ноль.

Отключение assert

Как уже упоминалось, оператор assert можно отключить во всей программе, передав ключ -O при запуске Python. Вот пример:

python -O my_script.py

В этом режиме все операторы assert в my_script.py будут проигнорированы. Это делает assert неподходящим для обработки ошибок в продакшен-коде.

Заключение

Оператор assert в Python — это удобный инструмент для отладки и тестирования. Он позволяет быстро проверять предположения о вашем коде и выявлять ошибки. Однако, имейте в виду, что его можно отключить, поэтому assert не должен использоваться для обработки ошибок в коде, предназначенном для продакшена.

Содержание: