Какие блоки для обработки исключений есть в Python?

«Какие блоки для обработки исключений есть в Python?» — вопрос из категории Python, который задают на 26% собеседований Data Scientist / ML Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В Python для обработки исключений используется конструкция try/except со следующими блоками:

  1. try: — блок, в котором размещается код, способный вызвать исключение (ошибку).
  2. except [ТипИсключения]: — блок-обработчик. Выполняется, если в try возникло исключение указанного типа. Можно использовать несколько блоков except для разных типов ошибок.
  3. else: (опционально) — блок, который выполняется только если в блоке try не было выброшено ни одного исключения.
  4. finally: (опционально) — блок, который выполняется всегда, независимо от того, было исключение или нет. Используется для обязательных действий (закрытие файлов, соединений с БД).

Практический пример с пояснением:

def safe_divide(x, y):
    try:
        result = x / y  # Потенциально опасная операция
    except ZeroDivisionError:
        print("Ошибка: Деление на ноль!")
        result = None
    except TypeError:
        print("Ошибка: Неверный тип аргументов (ожидались числа).")
        result = None
    else:
        # Сработает только если деление прошло успешно
        print(f"Деление выполнено успешно.")
    finally:
        # Сработает в любом случае, например, для логирования
        print(f"Операция деления {x} / {y} завершена.n")
    return result

print(safe_divide(10, 2))  # Сработают try -> else -> finally
print(safe_divide(10, 0))  # Сработают try -> except ZeroDivisionError -> finally