引發異常的,除了處理:
try:
# do something that *might* raise an exception
except Exception:
raise
finally:
# something I *always* want to run
的finally
套房總是將要執行的羯羊或你不重新拋出的異常。
從documentation:
如果finally
存在時,它指定一個「清除」處理程序。執行try
子句,包括任何except
和else
子句。如果任何一個條款發生異常並且沒有被處理,則異常被臨時保存。 finally
子句被執行。如果有保存的異常,則在finally
子句末尾再次提出。
注意,如果finally
套件使用break
或return
聲明,保存異常是丟棄:
如果finally
條款執行退貨或break語句,保存異常被丟棄:
def f():
try:
1/0
finally:
return 42
>>> f()
42
,但如果你發出break
,continue
或return
在try
套件,該套件finally
仍執行:
當return
,break
或continue
聲明中try
套房一try
...... finally
語句被執行時,finally
子句還「的出路。」執行
注意的Python 2.5之前,你甚至不能結合except
和finally
套房在同一try
聲明;見PEP 341: Unified try/except/finally。相反,預計將巢try
聲明:
try:
try:
# some code that could raise an exception
except SomeException:
# exception handler
finally:
# cleanup code, always executed
+1,不要忘記機會有用的調試信息添加到例外它超出前... – theodox 2013-03-25 20:24:06
@ Martijn Pieters,所以'finally'塊本質上就像另一個**外**'try ... except'塊一樣? – 2013-03-25 20:25:54
@JaceBrowning:是的。在過去,如果有'except'塊,並且你*有嵌套它們,你就不能使用'finally'。查看http://docs.python.org/2/whatsnew/2.5.html#pep-341-unified-try-except-finally – 2013-03-25 20:27:14