Se você tiver sorte o suficiente para suportar apenas o python 3.x, isso realmente se tornará uma coisa de beleza :)
aumentar de
Podemos encadear as exceções usando raise de .
try:
1 / 0
except ZeroDivisionError as e:
raise Exception('Smelly socks') from e
Nesse caso, a exceção que o chamador capturaria tem o número da linha do local onde aumentamos nossa exceção.
Traceback (most recent call last):
File "test.py", line 2, in <module>
1 / 0
ZeroDivisionError: division by zero
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "test.py", line 4, in <module>
raise Exception('Smelly socks') from e
Exception: Smelly socks
Observe que a exceção inferior possui apenas o rastreamento de pilha de onde criamos nossa exceção. O chamador ainda pode obter a exceção original acessando o __cause__
atributo da exceção que eles capturam.
with_traceback
Ou você pode usar with_traceback .
try:
1 / 0
except ZeroDivisionError as e:
raise Exception('Smelly socks').with_traceback(e.__traceback__)
Usando este formulário, a exceção que o chamador capturaria tem o retorno de onde ocorreu o erro original.
Traceback (most recent call last):
File "test.py", line 2, in <module>
1 / 0
ZeroDivisionError: division by zero
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "test.py", line 4, in <module>
raise Exception('Smelly socks').with_traceback(e.__traceback__)
File "test.py", line 2, in <module>
1 / 0
Exception: Smelly socks
Observe que a exceção inferior tem a linha em que executamos a divisão inválida, bem como a linha em que repetimos a exceção.