这是什么raise做的,如果它不是内部try或except条款,而只是作为函数的最后一条语句?
def foo(self):
try:
# some code that raises an exception
except Exception as e:
pass
# notice that the "raise" is outside
raise
Run Code Online (Sandbox Code Playgroud)
此示例打印1,但不打印2,因此必须是last raise语句只是引发了最后抛出的异常。
def foo():
try:
raise Exception()
except Exception as e:
pass
print 1
raise
print 2
if __name__ == '__main__':
foo()
Run Code Online (Sandbox Code Playgroud)
有关这种使用方式的任何正式文档?
正如罗素所说,
一条裸露的
raise语句重新引发了最后一个捕获的异常。
这是否在try-except块中发生与否无关紧要。如果存在捕获的异常,则调用raise将重新引发该异常。否则,Python会抱怨先前捕获的异常是,None并引发一个TypeError因为None不能真正引发的异常。
正如tdelaney所说,除了在错误处理函数中执行此操作似乎没有任何意义。我个人会说它甚至不属于错误处理函数,因为raise仍然应该在except子句中。无论是否发生错误,有人都可以使用它来尝试执行代码,但是finally子句是执行此操作的正确方法。另一种可能性是使用它作为确定在执行函数时是否发生错误的方法,但是有很多更好的方法(例如返回表示错误发生/位置的额外值)。
一条简单的raise语句会重新引发最后捕获的异常。https://docs.python.org/2/tutorial/errors.html#raise-exceptions
| 归档时间: |
|
| 查看次数: |
4078 次 |
| 最近记录: |