Sadece python 3.x'i destekleyecek kadar şanslıysanız, bu gerçekten bir güzellik haline gelir :)
yükseltmek
Biz kullanarak istisnaları zincir olabilir gelen zam .
try:
1 / 0
except ZeroDivisionError as e:
raise Exception('Smelly socks') from e
Bu durumda, arayanınızın yakalayacağı istisna, istisnanızı yükselttiğimiz yerin satır numarasına sahiptir.
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
Alt kural dışı durumun yalnızca kural dışı durumumuzu yükselttiğimiz yerden gelen yığın izine sahip olduğuna dikkat edin. Arayan, __cause__
yakaladığı istisnanın özelliğine erişerek orijinal istisnayı almaya devam edebilir .
with_traceback
Veya with_traceback ile kullanabilirsiniz .
try:
1 / 0
except ZeroDivisionError as e:
raise Exception('Smelly socks').with_traceback(e.__traceback__)
Bu formu kullanarak, arayanın yakalayacağı istisna, orijinal hatanın oluştuğu yerden izlemeye sahiptir.
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
Alt kural dışı durumun, geçersiz bölümü gerçekleştirdiğimiz satırın yanı sıra kural dışı durumu yeniden oluşturduğumuz satır olduğuna dikkat edin.