Рубрики
Без рубрики

Python – поймать несколько исключений

В этом руководстве мы узнаем, как поймать несколько исключений в Python. Python предлагает блок Try..Catch, чтобы позволить нам ловить несколько исключений. Посмотрим…

Автор оригинала: Pankaj Kumar.

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

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

Давайте понять, как мы можем справиться с несколькими исключениями в Python.

Поймать несколько исключений

Python позволяет нам обрабатывать несколько исключений в 2 способах:

Используя несколько кроме блоков

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

Псевдокод выглядит так:

try:
    pass
except Exception1:
    pass
except Exception2:
    pass

Давайте понять этот способ обращения с примером.

Рассмотрим функцию ниже, которая пытается добавить все элементы списка, используя + Оператор, а также проверяет, является ли какой-либо целочисленный элемент менее 200. Поскольку добавление/Consatenation также могут потерпеть неудачу, если типы могут быть разными, возможны несколько исключений.

input_list_1 = ['Hello', ' from', 123, 456, ' AskPython']
input_list_2 = [123, 456, ' AskPython']

def add_list(ip):
    # Adds all items of a list
    # Will raise ValueError if any integer item > 200
    # and will raise TypeError if addition operands are of different types
    if isinstance(ip, list):
        result = '' if isinstance(ip[0], str) else 0
        for item in ip:
            if isinstance(item, int) and item > 200:
                raise ValueError('Integer Item has to be <= 200')
            result = result + item
        return result
    else:
        return None

try:
    # Will raise TypeError
    res = add_list(input_list_1)
    print(res)
except TypeError as te:
    print(type(te), te)
except ValueError as ve:
    print(type(ve), ve)

try:
    # Will raise ValueError since 456 > 200
    res = add_list(input_list_2)
    print(res)
except TypeError as te:
    print(type(te), te)
except ValueError as ve:
    print(type(ve), ve)

Функция выполняется в двух списках, чтобы показать, что несколько исключений могут быть подняты из одной функции.

Выход

 can only concatenate str (not "int") to str
 Integer Item has to be <= 200

Используя один, кроме блока

Мы также можем поймать несколько исключений в одном кроме Блок, если вы хотите то же поведение для всех этих исключений.

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

Псевдокод для того же:

try:
    pass
except (Exception1, Exception2) as e:
    pass

Давайте изменим Главная Блок с использованием одного кроме Блок для нескольких исключений.

try:
    res = add_list(input_list_1)
    print(res)
except (TypeError, ValueError) as err:
    print(type(err), err)

try:
    res = add_list(input_list_2)
    print(res)
except (TypeError, ValueError) as err:
    print(type(err), err)

Вывод останется прежними:

 can only concatenate str (not "int") to str
 Integer Item has to be <= 200

Примечание : Несколько исключения могут быть любая комбинация встроенных исключений и Пользовательские исключения Отказ

Заключение

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

Рекомендации