Pull to refresh

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

def divide(x=1, y=0):
    try:
        return x / y
    except ZeroDivisionError:
        raise ValueError("Pattern 3 error.") from None
divide()

Отличие от простого вызова нового исключения, использование from None подавляет исходное исключение ZeroDivisionError. В данном случае трассировка не будет включать исходную ошибку ZeroDivisionError, а только исключение ValueError и сообщение об ошибке. Это полезно, когда вы хотите скрыть от пользователя детали исходного исключения или внутреннее исключение используемой библиотеки:

try:
  # библиотека, в которой могут быть внутренние исключения
    result = library_function(data) 
except InternalException as e:
    raise ExternalException("An error has occurred") from None

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

Частичный перевод этой статьи из блога jerrynsh.com

Tags:
Total votes 8: ↑8 and ↓0+8
Comments0

Articles