4

我正在尝试在 Python 中做一个嵌套的 try/catch 块来打印一些额外的调试信息:

try:
    assert( False )
except:
    print "some debugging information"
    try:
        another_function()
    except:
        print "that didn't work either"
    else:
        print "ooh, that worked!"
    raise

我想总是重新引发第一个错误,但这段代码似乎引发了第二个错误(那个被“也不起作用”捕获的错误)。有没有办法重新提出第一个异常?

4

3 回答 3

3

raise,没有参数,引发最后一个异常。要获得您想要的行为,请将错误放入变量中,以便您可以引发该异常:

try:
    assert( False )
# Right here
except Exception as e:
    print "some debugging information"
    try:
        another_function()
    except:
        print "that didn't work either"
    else:
        print "ooh, that worked!"
    raise e

但是请注意,您应该捕获更具体的异常,而不仅仅是Exception.

于 2013-10-01T04:11:12.360 回答
2

您应该捕获变量中的第一个异常。

try:
    assert(False)
except Exception as e:
    print "some debugging information"
    try:
        another_function()
    except:
        print "that didn't work either"
    else:
        print "ooh, that worked!"
    raise e

raise默认情况下会引发最后一个异常。

于 2013-10-01T04:10:58.443 回答
0

raise引发最后一个捕获的异常,除非您另外指定。如果要重新引发早期异常,则必须将其绑定到名称以供以后参考。

在 Python 2.x 中:

try:
    assert False
except Exception, e:
    ...
    raise e

在 Python 3.x 中:

try:
    assert False
except Exception as e:
    ...
    raise e

除非您正在编写通用代码,否则您只想捕获准备处理的异常......所以在上面的示例中,您将编写:

except AssertionError ... :
于 2013-10-01T04:21:27.717 回答