← Назад к вопросам

Какие знаешь виды исключений в Python?

2.0 Middle🔥 221 комментариев
#Java#Python#Теория тестирования#Фреймворки тестирования

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Виды исключений в Python

В Python исключения (exceptions) — это механизм обработки ошибок и нестандартных ситуаций в процессе выполнения программы. Все исключения являются классами, унаследованными от базового класса BaseException. Иерархия исключений в Python структурирована и позволяет точно отлавливать и обрабатывать различные типы ошибок.

Основные категории исключений

1. BaseException

Корневой класс всех исключений. Обычно его не перехватывают напрямую, кроме специальных случаев.

  • SystemExit: Генерируется функцией sys.exit() для завершения программы.
  • KeyboardInterrupt: Возникает при прерывании программы пользователем (например, Ctrl+C).
  • GeneratorExit: Вызывается при закрытии генератора или корутины.
  • Exception: Базовый класс для всех стандартных исключений, которые обычно перехватываются в программах.

2. Стандартные исключения (наследники Exception)

Это наиболее часто используемые исключения в повседневной разработке.

  • ArithmeticError: Базовый класс для арифметических ошибок.
     - **`ZeroDivisionError`**: Деление на ноль.
     - **`OverflowError`**: Результат арифметической операции слишком велик для представления.
     - **`FloatingPointError`**: Ошибка при выполнении операции с плавающей точкой (редко используется).

  • LookupError: Базовый класс для ошибок поиска (индексация, ключи).
     - **`IndexError`**: Индекс последовательности (списка, кортежа) вне допустимого диапазона.
     - **`KeyError`**: Ключ не найден в словаре.

  • OSError: Ошибки, связанные с операционной системой (например, ввод-вывод).
     - **`FileNotFoundError`**: Файл или директория не найдены.
     - **`PermissionError`**: Отсутствуют права доступа.
     - **`TimeoutError`**: Таймаут операции.

  • TypeError: Операция применена к объекту несоответствующего типа.
  • ValueError: Функция получает аргумент правильного типа, но некорректного значения.
  • AttributeError: Попытка доступа к несуществующему атрибуту объекта.
  • NameError: Идентификатор (имя переменной) не найден в локальной или глобальной области видимости.
  • SyntaxError: Синтаксическая ошибка в коде (обычно перехватывается интерпретатором до выполнения).
  • ImportError: Не удалось импортировать модуль или имя из модуля.
  • RuntimeError: Общая ошибка, которая не попадает в другие категории.
  • StopIteration: Генерируется для сигнализации о завершении итерации.
  • AssertionError: Утверждение (assert) не выполнилось.
  • MemoryError: Недостаточно памяти для выполнения операции.

Примеры использования и обработки исключений

try:
    # Пример деления на ноль
    result = 10 / 0
except ZeroDivisionError as e:
    print(f"Ошибка деления на ноль: {e}")

try:
    # Пример доступа к несуществующему ключу
    my_dict = {"key": "value"}
    value = my_dict["invalid_key"]
except KeyError as e:
    print(f"Ключ не найден: {e}")

try:
    # Пример TypeError
    result = "string" + 5
except TypeError as e:
    print(f"Ошибка типа: {e}")

try:
    # Пример FileNotFoundError
    with open("nonexistent_file.txt", "r") as file:
        content = file.read()
except FileNotFoundError as e:
    print(f"Файл не найден: {e}")

Создание пользовательских исключений

Для создания собственных исключений рекомендуется наследоваться от класса Exception или его подклассов. Это позволяет интегрировать их в стандартную иерархию и обрабатывать как встроенные исключения.

class MyCustomError(Exception):
    """Пользовательское исключение для специфичных ошибок."""
    def __init__(self, message, error_code):
        super().__init__(message)
        self.error_code = error_code

try:
    raise MyCustomError("Произошла кастомная ошибка", 500)
except MyCustomError as e:
    print(f"Поймано пользовательское исключение: {e}, код ошибки: {e.error_code}")

Важность в контексте QA Automation

Понимание исключений критично для QA Automation инженера по нескольким причинам:

  • Обработка ошибок в автотестах: Позволяет создавать устойчивые тесты, которые могут корректно реагировать на сбои в приложении или тестовом окружении.
  • Валидация поведения системы: Тесты могут проверять, что приложение генерирует правильные исключения в ответ на некорректные данные или действия.
  • Логирование и отчетность: Перехваченные исключения можно логировать для последующего анализа причин падения тестов.
  • Создание кастомных исключений для фреймворков: Например, для реализации собственных assertion-ошибок или управления потоком выполнения тестов.

В Python 3 исключения стали более детализированными (например, FileNotFoundError вместо общего IOError), что способствует написанию более чистого и точного кода обработки ошибок. Для QA Automation это особенно полезно при работе с файлами, сетью или внешними системами, где важно различать типы сбоев.

Какие знаешь виды исключений в Python? | PrepBro