Как сгенерировать исключение в Python

«Как сгенерировать исключение в Python» — вопрос из категории Тестирование, который задают на 10% собеседований Python Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Для принудительной генерации (вызова) исключения в Python используется оператор raise. Он немедленно прерывает нормальное выполнение кода и передает управление ближайшему обработчику except.

Это ключевой механизм для сигнализации об ошибках или нештатных ситуациях в коде.

Синтаксис: raise ExceptionType("Сообщение об ошибке")

Пример использования в функции:

def get_user_by_id(user_id: int):
    if not isinstance(user_id, int) or user_id <= 0:
        # Генерируем исключение, если ID некорректен
        raise ValueError("ID пользователя должен быть положительным целым числом")
    # ... логика поиска пользователя в базе данных
    return {"id": user_id, "name": "John Doe"}

Применение в негативном тестировании

В тестах raise используется для проверки того, что код корректно обрабатывает ошибочные входные данные. Лучшей практикой является использование контекстного менеджера pytest.raises.

Пример теста с pytest:

import pytest

def test_get_user_with_invalid_id():
    # Проверяем, что вызов функции с user_id = -1
    # действительно генерирует исключение ValueError
    with pytest.raises(ValueError, match="ID пользователя должен быть"):
        get_user_by_id(-1)

Этот тест успешно пройдет, только если внутри блока with будет сгенерировано исключение ValueError, текст которого соответствует регулярному выражению в match.