try: 1/0 except: print 'something wrong happened..' finally: print 'it seems i cannot be with except'
除非是我对《python基础教程》上面这句话理解有问题,这段代码运行完全没有问题,求解惑。
认证0级讲师
try: ... exception: ... else: ...
只有在try中沒有發生任何異常,所有程式碼完全成功的情況下才會轉入else
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 語法而終止,原來的異常將丟失而且無法重新引發.
反對這種寫法的一個理由是:在很多情況下,異常處理器需要做一些掃尾工作,而如果你在異常處理之前,用finally 語句塊中釋放了某些資源,你就不能再去做這項工作了.簡單的說,finally 語句塊並不是如你所想的是"最終的(final)"了.
一個最終的注意點:如果finally 中的代碼引發了另一個異常或由於return,break,continue 語法而終止,原來的異常將丟失而且無法重新引發.
參考:python 核心程式設計
這本書對應的python版本太老了。 py2.4以前是不能一起用的,2.5+就可以了。
這種老的不更新的書跟《pE INTO PYTHON》一樣,能不看就別看了,入門推薦《a byte of python》。
簡單理解就是無論try裡的語句是否發生異常,最後都會去執行一次finaly裡面的內容。
可以肯定的回答能一起使用
先看下else的使用:
只有在try中沒有發生任何異常,所有程式碼完全成功的情況下才會轉入else
再看下finally:
finally是無論是否捕捉到異常都會執行的一句,finally 可以單獨和try搭配,也可以和except,包括else一起配合使用
執行順序可能為A-B-D或A-C-D finally 單獨和try連用時,
不是用来捕捉异常,常常是用来维持一致的行为。
當try範圍中產生一個異常時,會立即跳到finally,finally執行完畢後,
会继续向上一层引发异常
參考:python 核心程式設計
這本書對應的python版本太老了。 py2.4以前是不能一起用的,2.5+就可以了。
這種老的不更新的書跟《pE INTO PYTHON》一樣,能不看就別看了,入門推薦《a byte of python》。
簡單理解就是無論try裡的語句是否發生異常,最後都會去執行一次finaly裡面的內容。