Si vous avez la chance de ne supporter que python 3.x, cela devient une véritable merveille :)
augmenter de
Nous pouvons enchaîner les exceptions en utilisant augmenter de .
try:
1 / 0
except ZeroDivisionError as e:
raise Exception('Smelly socks') from e
Dans ce cas, l'exception que votre appelant doit attraper a le numéro de ligne de l'endroit où nous levons notre exception.
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
Remarquez que l'exception du bas ne contient que la trace de la pile à partir de laquelle nous avons levé notre exception. L'appelant peut toujours obtenir l'exception originale en accédant au fichier __cause__
de l'exception qu'ils capturent.
avec_traceback
Ou vous pouvez utiliser avec_traceback .
try:
1 / 0
except ZeroDivisionError as e:
raise Exception('Smelly socks').with_traceback(e.__traceback__)
En utilisant cette forme, l'exception que votre appelant attrapera aura la trace de l'endroit où l'erreur originale s'est produite.
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
Remarquez que l'exception du bas comporte la ligne où nous avons effectué la division invalide ainsi que la ligne où nous relançons l'exception.