Tôi có một chút mã thực hiện xử lý ngoại lệ chức năng và mọi thứ hoạt động tốt, ngoại lệ được nâng lên khi tôi muốn, nhưng khi tôi gỡ lỗi, các dấu vết không phải lúc nào cũng làm những gì tôi muốn.Exception Passing Trong Python
Ví dụ A:
>>> 3/0
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ZeroDivisionError: integer division or modulo by zero
Ví dụ B:
>>> try: 3/0
... except Exception as e: raise e
...
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
ZeroDivisionError: integer division or modulo by zero
Trong cả hai ví dụ, ngoại trừ thực sự xảy ra ở dòng 1, nơi mà chúng tôi cố gắng làm 3/0, nhưng trong ví dụ sau, chúng tôi được cho biết đã xảy ra trên dòng 2, nơi nó được nâng lên.
Có cách nào bằng Python để nâng cao một ngoại lệ, như thể nó là một ngoại lệ, cái gì đó sẽ cho kết quả sau:
>>> try: 3/0
... except Exception as e: metaraise(e)
...
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ZeroDivisionError: integer division or modulo by zero
Nhưng sau đó bạn sẽ không có thông tin về dấu vết của khoản tăng mới. Bất kỳ người bắt nào ở trên đều sẽ bị lừa khi tin rằng ngoại lệ chỉ được nâng lên ở vị trí ban đầu. Các raiser thứ hai giấu sự tồn tại của nó mà có thể khá khó hiểu trong các trường hợp gỡ lỗi. – Alfe