14

假设我有一些这样的代码:

try:
    try:
        raise Exception("in the try")
    finally:
        raise Exception("in the finally")
except Exception, e:
    print "try block failed: %s" % (e,)

输出是:

try block failed: in the finally

从该打印语句的角度来看,有什么方法可以访问 try 中引发的异常,还是它永远消失了?

注意:我没有考虑用例;这只是好奇。

4

2 回答 2

14

我找不到任何关于这是否已被反向移植并且没有方便的 Py2 安装的任何信息,但在 Python 3 中,e有一个名为 的属性e.__context__,因此:

try:
    try:
        raise Exception("in the try")
    finally:
        raise Exception("in the finally")
except Exception as e:
    print(repr(e.__context__))

给出:

Exception('in the try',)

根据PEP 3314,在__context__添加之前,有关原始异常的信息不可用。

于 2012-04-20T14:52:13.963 回答
0
try:
    try:
        raise Exception("in the try")
    except Exception, e:
        print "try block failed"
    finally:
        raise Exception("in the finally")
except Exception, e:
    print "finally block failed: %s" % (e,)

但是,避免在块中使用可能引发异常的代码是一个好主意finally——通常你只是用它来做清理等。

于 2012-04-20T14:45:46.333 回答