python - 在一个try语句中不能同时使用except和finally子句?
PHP中文网
PHP中文网 2017-04-17 11:35:14
0
3
1985
try:
    1/0
except:
    print 'something wrong happened..'
finally:
    print 'it seems i cannot be with except'

除非是我对《python基础教程》上面这句话理解有问题,这段代码运行完全没有问题,求解惑。

PHP中文网
PHP中文网

认证0级讲师

全部回覆(3)
阿神

可以肯定的回答能一起使用

先看下else的使用:

try:
    ...
exception:
    ...
else:
    ...

只有在try中沒有發生任何異常,所有程式碼完全成功的情況下才會轉入else

再看下finally:

finally是無論是否捕捉到異常都會執行的一句,finally 可以單獨和try搭配,也可以和except,包括else一起配合使用

try: A
except MyException: B
else: C
finally: D

執行順序可能為A-B-D或A-C-D finally 單獨和try連用時,不是用来捕捉异常,常常是用来维持一致的行为。

當try範圍中產生一個異常時,會立即跳到finally,finally執行完畢後,会继续向上一层引发异常

  • 一個這樣寫的理由是如果在finally 的語句塊內發生了一個異常,你可以創建一個同現有的異常處理器在同一個(外)層次的異常處理器來處理它.這樣,從本質上來說,就可以同時處理在原始的try 語句塊和finally 語句塊中發生的錯誤.這種方法唯一的問題是,當finally 語句塊中的確發生異常時,你會丟失原來異常的上下文資訊,除非你在某個地方保存了它.
  • 反對這種寫法的一個理由是:在很多情況下,異常處理器需要做一些掃尾工作,而如果你在異常處理之前,用finally 語句塊中釋放了某些資源,你就不能再去做這項工作了.簡單的說,finally 語句塊並不是如你所想的是"最終的(final)"了.

  • 一個最終的注意點:如果finally 中的代碼引發了另一個異常或由於return,break,continue 語法而終止,原來的異常將丟失而且無法重新引發.

參考:python 核心程式設計

阿神

這本書對應的python版本太老了。 py2.4以前是不能一起用的,2.5+就可以了。

這種老的不更新的書跟《pE INTO PYTHON》一樣,能不看就別看了,入門推薦《a byte of python》。

Peter_Zhu

簡單理解就是無論try裡的語句是否發生異常,最後都會去執行一次finaly裡面的內容。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板