我正在尝试在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
我想总是重新提出第一个错误,但是这段代码似乎引发了第二个错误(那个“没有用”的错误)。有没有办法重新提出第一个例外?
答案 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 ... :