It is useful sometimes to catch an exception and then re-raise it or raise a different one.
This can be done using the raise ... from
statement.
try:
# Code that might raise an exception
except ExceptionType as e:
# Code that handles the exception
raise ExceptionType2("Message") from e
The above code will raise an exception of type ExceptionType2
with the message Message
and the original exception will be stored in the __cause__
attribute of the new exception.
By default, the nested raised exception gets chained to the new exception so in our case the from e
part is optional.
But if you want to raise a new exception and not chain the nested one, you can use the from None
statement.
try:
# Code that might raise an exception
except ExceptionType as e:
# Code that handles the exception
raise ExceptionType2("Message") from None
Note: It is recommended to always chain exceptions, unless you have a good reason not to.
Note 2: Re-raising an exception inside an
except
statement is usually a bad practice. But it can be useful sometimes, for example when you want to add more information to the exception.