🔖 Справочник команд и синтаксиса

⚡ Краткий справочник

  • try/except — перехват исключений.
  • except (A, B) as e: — перехват нескольких типов и доступ к объекту ошибки.
  • else — код при успехе; finally — код в любом случае.
  • raise ValueError("msg") — возбуждение исключения.
  • class MyError(Exception): — пользовательское исключение.
  • assert x > 0 — отладочная проверка.
  • logging.basicConfig(level=logging.DEBUG) — настройка логирования.

Синтаксис обработки исключений

КонструкцияОписаниеПример
try: Блок кода, который может вызвать исключение. try: 1 / 0
except Type: Обработчик конкретного исключения. except ZeroDivisionError:
except (T1, T2): Обработка нескольких типов в одном блоке. except (ValueError, TypeError):
except Type as e: Получить объект исключения в переменную. except ValueError as e: print(e)
else: Выполняется, если исключения не было. else: print("OK")
finally: Выполняется всегда. finally: file.close()
raise Type("msg") Возбудить исключение вручную. raise ValueError("bad value")
raise Повторно возбудить текущее исключение. except: log(); raise
assert cond, "msg" Возбудить AssertionError, если условие ложно. assert n >= 0

Частые исключения

ИсключениеКогда возникаетЧто делать
ZeroDivisionError Деление на ноль. Проверить делитель или обернуть в try/except.
ValueError Некорректное значение. Проверить формат данных перед преобразованием.
KeyError Ключ отсутствует в словаре. Использовать dict.get() или try/except.
IndexError Индекс вне диапазона. Проверить длину последовательности.
TypeError Неправильный тип аргумента. Проверить типы или использовать guard clause.
FileNotFoundError Файл не найден. Проверить путь или обработать ошибку.
RecursionError Переполнение стека рекурсии. Добавить базовый случай или переписать на цикл.
AssertionError Условие в assert ложно. Использовать только для внутренних инвариантов.

Настройка logging

Параметр / плейсхолдерОписание
level=logging.DEBUGУровень логирования: DEBUG, INFO, WARNING, ERROR, CRITICAL.
filename="app.log"Имя файла для записи логов.
format="..."Формат строки лога.
%(asctime)sВремя записи.
%(levelname)sУровень сообщения.
%(filename)sИмя файла.
%(lineno)dНомер строки.
%(message)sТекст сообщения.

Частые паттерны

# 1. Запрос корректного ввода
while True:
    try:
        value = float(input("Введите число: "))
    except ValueError:
        print("Некорректное число, попробуйте снова.")
    else:
        break


# 2. Безопасное деление
def safe_divide(a: float, b: float) -> float:
    try:
        return a / b
    except ZeroDivisionError:
        raise ValueError("Делитель не может быть нулём")


# 3. Логирование ошибок
import logging

logging.basicConfig(filename="errors.log", level=logging.ERROR)

try:
    risky_operation()
except Exception as e:
    logging.error(f"Ошибка: {e}")
    raise


# 4. Пользовательское исключение
class BusinessError(Exception):
    """Бизнес-ошибка."""


# 5. Отладочная проверка
assert len(items) > 0, "items не должен быть пустым"
⚠️ Проверить по документации: паттерны с повторным raise и пользовательскими исключениями выходят за рамки исходной лекции, но являются стандартной практикой Python.