Tôi tự hỏi làm thế nào tôi có thể bắt được bất kỳ đối tượng được nêu nào (nghĩa là loại không mở rộng Exception
) và vẫn nhận được tham chiếu đến nó.Làm thế nào để bắt một ngoại lệ trong python và nhận được một tham chiếu đến ngoại lệ, KHÔNG biết loại?
Tôi bắt gặp mong muốn làm điều này khi sử dụng Jython. Khi gọi một phương thức Java, nếu phương pháp đó đặt ra một ngoại lệ, nó sẽ không mở rộng lớp Exception
Python, vì vậy một khối như thế này sẽ không bắt nó:
try:
# some call to a java lib that raises an exception here
except Exception, e:
# will never be entered
tôi có thể làm điều này, nhưng sau đó tôi không có quyền truy cập vào đối tượng ngoại lệ được nâng lên.
Tôi có thể giải quyết vấn đề này bằng cách nhập loại ngoại lệ Java và bắt nó một cách rõ ràng, nhưng điều này gây khó khăn/không thể viết trình bao bọc/trang trí xử lý ngoại lệ chung.
Có cách nào để bắt ngoại lệ tùy ý và vẫn nhận được tham chiếu đến nó trong khối except
không?
Tôi nên lưu ý rằng tôi hy vọng cho trang trí xử lý ngoại lệ mà tôi đang làm để có thể sử dụng được với các dự án Python, không chỉ với các dự án Jython. Tôi muốn tránh nhập java.lang.Exception
vì điều đó chỉ làm cho nó chỉ là Jython. Ví dụ, tôi hình tôi có thể làm một cái gì đó như thế này (nhưng tôi đã không thử nó), nhưng tôi muốn tránh nó nếu tôi có thể.
try:
# some function that may be running jython and may raise a java exception
except (Exception, java.lang.Exception), e:
# I imagine this would work, but it makes the code jython-only
Do những ngoại lệ này ít nhất có nguồn gốc từ BaseException? – Seth