如何在python中捕获异常并获取引用异常,不知道该类型?

我想知道如何捕获任何提出的对象(即不扩展异常的类型),并且仍然可以引用它。

当我使用Jython时,我遇到了这样做的愿望。当调用Java方法时,如果该方法引发异常,则不会扩展Python的Exception类,因此这样的块将无法捕获它:

try:
    # some call to a java lib that raises an exception here
except Exception, e:
    # will never be entered

我可以这样做,但是我无法访问引发的异常对象。

try:
    # some call to a java lib that raises an exception here
except:
    # will enter here, but there's no reference to the exception that was raised

我可以通过导入Java异常类型并明确捕获它来解决这个问题,但这使得编写通用异常处理包装器/装饰器变得困难/不可能。

有没有办法捕获一些任意的异常,仍然得到一个引用它在except块中?

我应该注意,我希望我正在使用的异常处理装饰器可用于Python项目,而不仅仅是与Jython项目。我想避免导入java.lang.Exception,因为这只是使它成为Jython。例如,我想我可以做这样的事情(但是我没有尝试过),但是如果可以的话我想避免它。

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
最佳答案
您可以使用sys模块引用异常。 sys.exc_info是类型,实例和追溯的元组。

import sys

try:
    # some call to a java lib that raises an exception here
except:
    instance = sys.exc_info()[1]

转载注明原文:如何在python中捕获异常并获取引用异常,不知道该类型? - 代码日志