在 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
套件使用break
orreturn
语句,则保存的异常将被丢弃:
如果finally
子句执行 return 或 break 语句,则丢弃保存的异常:
def f():
try:
1/0
finally:
return 42
>>> f()
42
但如果您发出break
,continue
或return
在try
套件中,finally
套件仍会执行:
当return
, break
orcontinue
语句在...语句try
套件中执行时,该子句也将在“退出时”执行。</p>
try
finally
finally
请注意,在 Python 2.5 之前,您甚至不能在同一语句中组合except
和套件;参见PEP 341:统一 try/except/finally。相反,您应该嵌套语句:finally
try
try
try:
try:
# some code that could raise an exception
except SomeException:
# exception handler
finally:
# cleanup code, always executed