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