在 except 处理程序中引发异常:
try:
# do something that *might* raise an exception
except Exception:
raise
finally:
# something I *always* want to run
无论您是否重新引发异常,套件总是会被finally执行。
从文档中:
如果finally存在,它指定一个“清理”处理程序。该try子句被执行,包括任何except和else子句。如果任一子句发生异常且未处理,则暂时保存该异常。finally子句被执行。finally如果存在已保存的异常,则会在子句末尾重新引发。
请注意,如果finally套件使用breakorreturn语句,则保存的异常将被丢弃:
如果finally子句执行 return 或 break 语句,则丢弃保存的异常:
def f():
try:
1/0
finally:
return 42
>>> f()
42
但如果您发出break,continue或return在try套件中,finally套件仍会执行:
当return, breakorcontinue语句在...语句try套件中执行时,该子句也将在“退出时”执行。</p>
tryfinallyfinally
请注意,在 Python 2.5 之前,您甚至不能在同一语句中组合except和套件;参见PEP 341:统一 try/except/finally。相反,您应该嵌套语句:finallytrytry
try:
try:
# some code that could raise an exception
except SomeException:
# exception handler
finally:
# cleanup code, always executed