Обработка исключений: try, except, else, finally

Когда ошибка — не конец 🔥

Программы, как и люди, ошибаются. Но в Python ошибки можно предвидеть и обработать грамотно! Давай разберёмся, как превратить падение программы в изящное решение проблемы.

print(10 / 0)  # ZeroDivisionError: division by zero

Такой код завершится с ошибкой. Но что, если мы хотим продолжить работу?


Базовый синтаксис: try-except

Основной инструмент — конструкция try-except. Работает просто: 1. Пробуем выполнить код в try 2. Если ошибка — переходим в except

try:
    result = 10 / 0
except ZeroDivisionError:
    print("Ой, деление на ноль! Исправь это!")  # Сработает этот блок

Ловим конкретные исключения 🎯

Можно указывать конкретные типы ошибок для разных ситуаций:

try:
    # Код, который может упасть
    file = open("несуществующий_файл.txt", "r")
except FileNotFoundError:
    print("Файл не найден! Создаю новый...")
except PermissionError:
    print("Нет прав доступа!")
except Exception as e:  # Ловим ВСЕ ошибки (не рекомендуется без нужды)
    print(f"Неожиданная ошибка: {e}")

Полный набор: else и finally

Конструкция становится мощнее с дополнительными блоками:

try:
    print("Пытаемся что-то сделать...")
    result = 10 / 2  # Успешное выполнение
except ZeroDivisionError:
    print("Деление на ноль!")
else:
    print("Всё прошло успешно! Результат:", result)  # Сработает этот блок
finally:
    print("Это выполнится ВСЕГДА")  # И этот тоже
  • else — выполняется, если не было исключений
  • finally — выполняется в любом случае (даже при выходе из программы!)

Практикуемся на реальных примерах 💻

Пример 1: Работа с файлами

try:
    with open("data.txt", "r") as file:
        content = file.read()
except FileNotFoundError:
    print("Файл не найден, создаём новый...")
    with open("data.txt", "w") as file:
        file.write("Новые данные")
else:
    print("Содержимое файла:", content)
finally:
    print("Операция с файлом завершена")

Пример 2: Валидация ввода пользователя

while True:
    try:
        age = int(input("Сколько тебе лет? "))
        if age < 0:
            raise ValueError("Возраст не может быть отрицательным!")
    except ValueError as e:
        print(f"Ошибка: {e}. Попробуй ещё раз!")
    else:
        print(f"Тебе {age} лет! Круто!")
        break

Кастомные исключения 🛠️

Можно создавать свои классы ошибок для сложных сценариев:

class TooYoungError(Exception):
    pass

def check_age(age):
    if age < 18:
        raise TooYoungError("Доступ запрещён для лиц младше 18 лет!")
    return "Добро пожаловать!"

try:
    print(check_age(15))
except TooYoungError as e:
    print(e)  # Выведет сообщение об ошибке

Философия обработки ошибок 🧠

  1. Лови только то, что можешь обработать — не используй "голый" except
  2. Будь конкретным — указывай типы исключений
  3. Документируй — описывай возможные ошибки в docstring
  4. Не злоупотребляй — иногда лучше дать программе упасть, чем молча проглотить ошибку
# Плохо:
try:
    do_something()
except:
    pass  # Тихий кошмар!

# Хорошо:
try:
    do_something()
except SpecificError as e:
    handle_error(e)

Продвинутые техники 🚀

Вложенные try-except

try:
    try:
        risky_operation()
    except SpecificError:
        handle_specific_error()
except GeneralError:
    handle_general_error()

Использование raise без аргументов

try:
    something()
except SomeError:
    print("Частичная обработка")
    raise  # Пробрасываем исключение дальше

Визуализация работы try-except 🎨

[Начало]
  |
  v
try:  -- успех --> else --> finally
  |                    
  v                    
возникла ошибка  |
  |                             |
  v                             |
except: <----------+
  |
  v
finally
  |
[Конец]

Теперь ты вооружён знаниями, чтобы делать свои программы устойчивыми к ошибкам! Помни: хороший разработчик не тот, кто не делает ошибок, а тот, кто умеет их грамотно обрабатывать. 😉

Скрыть рекламу навсегда

🌱 Индвидидулаьные занятия

Индивидуальные онлайн-занятия по программированию для детей и подростков

Личный подход, без воды, с фокусом на понимание и реальные проекты.

🚀 Записаться на занятие