Основы обработки исключений в Python

Обработка исключений в Python — это механизм, который позволяет справляться с ошибками, возникающими во время выполнения программы, предотвращая её аварийное завершение. Исключения используются для обработки непредвиденных ситуаций, таких как попытка деления на ноль, доступ к несуществующему файлу или неверный ввод данных.

Что такое исключение?

Исключение — это событие, которое возникает во время выполнения программы и нарушает её нормальный ход. Если исключение не обрабатывается, программа завершает свою работу с ошибкой.

Конструкция try-except

Основной способ обработки исключений в Python реализован через конструкцию try-except.

Синтаксис:

try:
    # Код, который может вызвать исключение
except <ExceptionType>:
    # Код для обработки исключения

Пример:

try:
    result = 10 / 0
except ZeroDivisionError:
    print("Ошибка: Деление на ноль!")

Обработка нескольких исключений

Можно обрабатывать несколько типов исключений, используя несколько блоков except или передав их в один блок через кортеж.

Пример с несколькими блоками except:

try:
    number = int(input("Введите число: "))
    result = 10 / number
except ValueError:
    print("Ошибка: Введите правильное число.")
except ZeroDivisionError:
    print("Ошибка: Деление на ноль!")

Пример с кортежем исключений:

try:
    number = int(input("Введите число: "))
    result = 10 / number
except (ValueError, ZeroDivisionError) as e:
    print(f"Ошибка: {e}")

Блок else

Блок else выполняется, если код в блоке try не вызвал исключений.

Пример:

try:
    number = int(input("Введите число: "))
    result = 10 / number
except ZeroDivisionError:
    print("Ошибка: Деление на ноль!")
else:
    print(f"Результат: {result}")

Блок finally

Блок finally выполняется в любом случае, вне зависимости от того, возникло исключение или нет. Это удобно для выполнения завершающих операций, таких как закрытие файлов или освобождение ресурсов.

Пример:

try:
    file = open("example.txt", "r")
    content = file.read()
except FileNotFoundError:
    print("Ошибка: Файл не найден.")
finally:
    file.close()  # Этот блок выполнится в любом случае

Создание собственных исключений

Вы можете создавать свои собственные исключения, наследуя от класса Exception.

Пример:

class MyCustomError(Exception):
    pass

def do_something(value):
    if value < 0:
        raise MyCustomError("Значение не должно быть отрицательным")

try:
    do_something(-5)
except MyCustomError as e:
    print(f"Ошибка: {e}")

Повторное возбуждение исключения

Иногда нужно обработать исключение, а затем передать его дальше. Это можно сделать с помощью ключевого слова raise.

Пример:

try:
    number = int(input("Введите число: "))
    result = 10 / number
except ZeroDivisionError:
    print("Обнаружено деление на ноль.")
    raise  # Повторно возбуждает исключение

Захват всех исключений

Чтобы захватить все возможные исключения, можно использовать блок except без указания типа исключения. Однако это делается с осторожностью, так как может скрыть ошибки.

Пример:

try:
    number = int(input("Введите число: "))
    result = 10 / number
except Exception as e:
    print(f"Произошла ошибка: {e}")

Заключение

Обработка исключений делает программы более устойчивыми к ошибкам, улучшает их стабильность и управляемость. Использование конструкций try-except-else-finally позволяет гибко реагировать на разные ситуации, минимизируя риски неожиданных сбоев программы.

Last updated