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

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

В Python мы можем перехватывать несколько исключений в одном блоке исключений. Это полезно, когда у вас есть фрагмент кода, который может вызвать несколько типов исключений и вы хотите обработать их все одинаково.

Синтаксис:

try:
    # code that may raise an exception
except(ExceptionType1, ExceptionType2, ExceptionType3, ...):
    # code to handle the exception

Пример

Допустим, вы пишете программу на языке Python, которая считывает данные из файла и выполняет операцию деления. В процессе работы этот код может столкнуться с несколькими ошибками.

Например, при использовании функции open() может возникнуть ошибка FileNotFoundError, если указанный файл не существует. А при выполнении операции деления может возникнуть ошибка ZeroDivisionError, если попытаетесь разделить на ноль.

Вот как можно перехватить оба исключения в Python с помощью одного блока исключений:

try:
    file = open("myfile.txt", "r")
    number = int(file.read())
    result = 100 / number
except(FileNotFoundError, ZeroDivisionError):
    print("An error occurred")

В этом коде, если происходит ошибка FileNotFoundError или ZeroDivisionError, программа выдаст сообщение «Произошла ошибка» и продолжит выполнение остальных частей программы.

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

try:
    file = open("myfile.txt", "r")
    number = int(file.read())
    result = 100 / number
except FileNotFoundError:
    print("The file was not found")
except ZeroDivisionError:
    print("Cannot divide by zero")

В этом примере, если файл не найден, программа выводит сообщение: «Файл не найден». А если возникает ошибка деления на ноль, то программа сообщает: «Невозможно разделить на ноль».

Другой пример:

Рассмотрим ситуацию, когда у нас есть словарь Python, заполненный пользовательскими данными. Мы хотим выполнить некоторые операции с этим словарём, но есть вероятность возникновения исключений.

Например, мы можем попытаться получить доступ к ключу, которого нет в словаре. Это приведёт к возникновению исключения KeyError. Также мы можем попытаться преобразовать строку в целое число, но если строка содержит символы, не являющиеся цифрами, то возникнет исключение ValueError.

user_data = {
    "name": "John",
    "age": "25",
    "balance": "two thousand"  # This should have been a numeric string.
}

try:
    # Accessing a non-existing key will raise a KeyError.
    email = user_data["email"]

    # Converting a non-numeric string to an integer will raise a ValueError.
    balance = int(user_data["balance"])
except(KeyError, ValueError) as e:
    print("An error occurred: ", str(e))

В этом коде, если ключ «email» отсутствует в словаре, возникнет ошибка KeyError. Если же мы попытаемся преобразовать строку «две тысячи» в целое число, возникнет ошибка ValueError. Оба этих исключения обрабатываются блоком исключений, что позволяет выводить сообщение об ошибке.

Посмотрите на скриншот ниже, чтобы увидеть результат.

Как перехватить несколько исключений в Python

Использование as

В Python вы можете использовать ключевое слово `as` в блоке исключений, чтобы получить доступ к объекту исключения. Это позволяет вам вывести сообщение об ошибке, связанное с исключением, или обратиться к другим его свойствам.

Вот пример:

try:
    file = open("myfile.txt", "r")
    number = int(file.read())
    result = 100 / number
except(FileNotFoundError, ZeroDivisionError) as e:
    print("An error occurred: ", str(e))

Если в этом коде возникает ошибка, программа выводит сообщение «Произошла ошибка:» и далее следует информация об ошибке, связанная с исключением.

Добавить комментарий