Python嵌套try / except - 引发第一个异常?

时间:2013-10-01 04:07:58

标签: python try-catch

我正在尝试在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

我想总是重新提出第一个错误,但是这段代码似乎引发了第二个错误(那个“没有用”的错误)。有没有办法重新提出第一个例外?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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会引发最后一次异常。

答案 2 :(得分: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 ... :