Исключения
1. Что такое исключения
Исключение (exception) — это событие, которое прерывает нормальное выполнение программы, если его не обработать.
Пример: ошибка деления на ноль, отсутствующий ключ в словаре, таймаут в запросе к API.
2. Основные типы встроенных исключений
Исключение
Когда возникает
Пример
AssertionError
Не прошла проверка assert
assert 2 + 2 == 5
ValueError
Неверное значение аргумента
int("abc")
TypeError
Операция с несовместимыми типами
5 + "str"
KeyError
Нет ключа в словаре
data["missing"]
IndexError
Индексация вне диапазона
[1,2][5]
FileNotFoundError
Нет файла
open("abc.txt")
TimeoutError
/ requests.exceptions.Timeout
Таймаут операции
HTTP-запрос долго не отвечает
3. Базовая обработка исключений
try:
result = 10 / 0
except ZeroDivisionError as e:
print(f"Ошибка: {e}")
4. Обработка нескольких типов
try:
value = int(input("Введите число: "))
print(10 / value)
except ValueError:
print("Нужно ввести число!")
except ZeroDivisionError:
print("Делить на ноль нельзя!")
5. Объединённая обработка
try:
data = {"a": 1}
print(data["b"])
except (KeyError, IndexError) as e:
print(f"Ошибка доступа к данным: {e}")
6. Блок else
и finally
else
и finally
try:
num = int("10")
except ValueError:
print("Ошибка преобразования")
else:
print("Всё прошло успешно")
finally:
print("Закрываю соединение/файл")
💡 finally
выполняется всегда — даже при ошибке.
7. Генерация собственных исключений
def validate_age(age):
if age < 18:
raise ValueError("Возраст должен быть ≥ 18")
return True
try:
validate_age(15)
except ValueError as e:
print(f"Валидация не пройдена: {e}")
8. Пользовательские исключения
class LoginError(Exception):
pass
def login(user, password):
if password != "secret":
raise LoginError("Неверный пароль")
try:
login("user", "wrong")
except LoginError as e:
print(f"Ошибка входа: {e}")
9. В автоматизации тестирования
Обработка API ошибок
import requests
try:
r = requests.get("https://httpbin.org/delay/5", timeout=2)
except requests.exceptions.Timeout:
print("Таймаут запроса!")
Прерывание теста, если данные некорректны
import pytest
def test_age_validation():
with pytest.raises(ValueError):
validate_age(15)
Last updated
Was this helpful?