Группы исключений в Python

Что вы можете сделать на Python Программирование и разработка

В этой статье мы увидим, как мы можем использовать последнюю функцию Python 3.11, группы исключений. Чтобы использовать ExceptionGroup, вы должны быть знакомы с обработкой исключений в Python. Как следует из самого названия, это набор/группа различных видов исключений. Не создавая Множественных исключений, мы можем сгруппировать различные исключения, которые мы можем позже извлекать одно за другим, когда это необходимо, порядок, в котором исключения хранятся в группе исключений, не имеет значения при их вызове.

ПРИМЕЧАНИЕ. Если на устройстве пользователя не установлен Python 3.11, это не сработает.

Syntax: ExceptionGroup(“<User_Message/Description>”,[<SubException1(“exception message”)>,

<SubException2(“exception message”)>,…. <SubExceptionN(“exception message”)>])

Параметр: ExceptionGroup принимает два параметра.

  • First_Parameter— сообщение/описание того, какие исключения будут храниться, или что-либо, что пользователь хочет написать там в качестве сообщения группы исключений.
  • Second_Parameter— любое количество дополнительных исключений, которые пользователь хочет сохранить вместе с соответствующими сообщениями.

Пример

Как видите, даже несмотря на то, что мы создали функцию exceptionGroup(), мы не возвращаем никакого значения, а вместо того, чтобы поднимать переменную, в которой мы храним ExceptionGroup, потому что, как мы знаем, в случае обработки исключения мы возбуждаем Исключение. Теперь давайте создадим группу исключений и посмотрим, как она работает.

Python3

def exceptionGroup():
    exec_gr = ExceptionGroup('ExceptionGroup Message!',
                [FileNotFoundError("This File is not found"),
                ValueError("Invalid Value Provided"),
                ZeroDivisionError("Trying to divide by 0")])
    raise exec_gr

Что произойдет, если мы вызовем эту функцию?

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

Python3

exceptionGroup()

Вывод:

Пользователи получат структурированное сообщение об ошибке нового типа

Теперь заключите их в блок try-except Python.

Во фрагменте мы используем традиционный метод блока try-except и вызываем всю группу исключений в блоке исключений и печатаем все сообщения Sub Exception, которые у нас есть внутри него. Это даст следующий результат.

Python3

try:
    exceptionGroup()
except ExceptionGroup as eg:
    print(eg.exceptions)

Вывод

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

Приведенный выше фрагмент вернет следующий вывод, он просто печатает

Обработка одного исключения из группы исключений

Существует еще один отличный способ обработки подисключений по одному, не обрабатывая их все вместе, как в вышеупомянутом традиционном методе. Для этого есть новый синтаксис — exclude*, который используется именно с ExceptionGroup.

except* <ExceptionName> as <any_alias>:
    print(<any_alias>.exception)

Пример

Python3

try:
    exceptionGroup()
except* FileNotFoundError as fnf:
    print(fnf.exceptions)
except* ValueError as ve:
    print(ve.exceptions)
except* ZeroDivisionError as zde:
    print(zde.exceptions)

Вывод:

Как мы видим, отображаются все исключения и соответствующие сообщения об ошибках

Как мы видим, отображаются все исключения и соответствующие сообщения об ошибках. Теперь, если мы хотим только печатать сообщения, нам нужно написать код, как показано ниже:

Python3

# only one except part is given here, the try block would be same.
# the way of printing the rest of the except blocks will be same also
 
except* FileNotFoundError as fnf:
    for err in fnf.exceptions:
        print(err)

Вывод:

Как мы видим, отображаются все исключения и соответствующие

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

Если мы обрабатываем только одно исключение, но существует более

Как мы видим, Python предоставит нам имена необработанных исключений и их сообщения в структурированном виде.

Вложенная группа исключений

У нас может быть ExceptionGroup внутри ExceptionGroup, т.е. вложенной группы исключений. Мы получим этот удивительный структурированный вывод, который ясно расскажет нам о нашей вложенной группе исключений наряду с нашей реальной группой исключений.

Python3

# defining the exception group function with a Nested exception group
def exceptionGroup():
    exec_gr = ExceptionGroup('ExceptionGroup Message!',
                             [FileNotFoundError("This File is not found"),
                              ValueError("Invalid Value Provided"),
                              ZeroDivisionError("Trying to divide by 0"),
                              ExceptionGroup("This is a Nested ExceptionGroup",
                                             [IndentationError("Please check your Indentation"),
                                              SyntaxError(
                                                 "there is a error in the syntax"),
                                                 ImportError("Module Not Found")])])
    raise exec_gr
 
 
# calling the function
exceptionGroup()

Вывод:

У нас может быть ExceptionGroup внутри ExceptionGroup

Читайте также:  Как выполнить файл SQL с помощью Java, используя потоки файлов и ввода-вывода?
Оцените статью
bestprogrammer.ru
Добавить комментарий