Оператор raise в Python — вызов исключения

В этом уроке вы узнаете, как вызывать исключения с помощью оператора raise Python.

Содержание

Что такое оператор raise в Python?

Чтобы вызвать исключение, используйте оператор raise:

raise ExceptionType()

ExceptionType() должен быть подклассом класса BaseException. Обычно это подкласс класса Exception. Обратите внимание, что ExceptionType не обязательно должен быть напрямую унаследован от класса Exception. Он может косвенно наследовать от класса, который является подклассом класса Exception.

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

В следующем примере оператор raise используется для создания исключения ValueError. Он передает три аргумента методу ValueError __init__:

try:
    raise ValueError('The value error exception', 'x', 'y')
except ValueError as ex:
    print(ex.args)

Выход:

('The value error exception', 'x', 'y')

Повторный вызов текущего исключения

Иногда вам нужно зарегистрировать исключение и снова вызвать то же исключение. В этом случае вы можете использовать оператор raise без указания объекта исключения.

Например, ниже определяется функция Division(), которая возвращает деление двух чисел:

def division(a, b):
    try:
        return a / b
    except ZeroDivisionError as ex:
        print('Logging exception:', str(ex))
        raise

Если вы передадите ноль во второй аргумент функции Division(), возникнет исключение ZeroDivisionError. Однако вместо обработки исключения вы можете зарегистрировать его и снова вызвать.

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

Следующий код вызывает исключение ZeroDivisionError:

division(1, 0)

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

Logging exception: division by zero
Traceback(most recent call last):
  File "c:/pythontutorial/app.py", line 9, in <module>
    division(1, 0)
  File "C:/pythontutorial/app.py", line 3, in division
    return a / b
ZeroDivisionError: division by zero

Как вызвать другое исключение во время обработки

При обработке исключения вам может потребоваться вызвать другое исключение. Например:

def division(a, b):
    try:
        return a / b
    except ZeroDivisionError as ex:
        raise ValueError('b must not zero')

В функции Division() мы вызываем исключение ValueError, если возникает ZeroDivisionError.

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

division(1, 0)

Выход:

Traceback(most recent call last):
  File "C:/pythontutorial/app.py", line 3, in division
    return a / b
ZeroDivisionError: division by zero

During handling of the above exception, another exception occurred:

Traceback(most recent call last):
  File "C:/pythontutorial/app.py", line 8, in <module>
    division(1, 0)
  File "C:/pythontutorial/app.py", line 5, in division
    raise ValueError('b must not zero')
ValueError: b must not zero

Сначала возникает исключение ZeroDivisionError:

Traceback(most recent call last):
  File "C:/pythontutorial/app.py", line 3, in division
    return a / b
ZeroDivisionError: division by zero

Во-вторых, во время обработки исключения ZeroDivisionError возникает исключение ValueError:

Traceback(most recent call last):
  File "C:/pythontutorial/app.py", line 8, in <module>
    division(1, 0)
  File "C:/pythontutorial/app.py", line 5, in division
    raise ValueError('b must not zero')
ValueError: b must not zero
Похожие посты
Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *