Обработка исключений в 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