Какие знаешь виды исключений в Python?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Виды исключений в 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 это особенно полезно при работе с файлами, сетью или внешними системами, где важно различать типы сбоев.