Nếu bạn đủ may mắn để chỉ hỗ trợ python 3.x, điều này thực sự trở thành một điều tuyệt vời :)
tăng từ
Chúng ta có thể xâu chuỗi các trường hợp ngoại lệ bằng cách tăng từ .
try:
1 / 0
except ZeroDivisionError as e:
raise Exception('Smelly socks') from e
Trong trường hợp này, ngoại lệ mà người gọi của bạn sẽ bắt gặp có số dòng của nơi chúng tôi nêu ra ngoại lệ của mình.
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
Lưu ý ngoại lệ dưới cùng chỉ có stacktrace từ nơi chúng ta nêu ra ngoại lệ của mình. Người gọi của bạn vẫn có thể nhận được ngoại lệ ban đầu bằng cách truy cập __cause__
thuộc tính của ngoại lệ họ bắt được.
with_tracBack
Hoặc bạn có thể sử dụng with_tracBack .
try:
1 / 0
except ZeroDivisionError as e:
raise Exception('Smelly socks').with_traceback(e.__traceback__)
Sử dụng biểu mẫu này, ngoại lệ mà người gọi của bạn sẽ bắt gặp có dấu vết từ nơi xảy ra lỗi ban đầu.
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
Lưu ý ngoại lệ dưới cùng có dòng nơi chúng tôi thực hiện phép chia không hợp lệ cũng như dòng nơi chúng tôi lấy lại ngoại lệ.