搜尋

首頁  >  問答  >  主體

python - 在一个try语句中不能同时使用except和finally子句?

try:
    1/0
except:
    print 'something wrong happened..'
finally:
    print 'it seems i cannot be with except'

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

PHP中文网PHP中文网2803 天前1986

全部回覆(3)我來回復

  • 阿神

    阿神2017-04-17 11:37:14

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

    先看下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 核心程式設計

    回覆
    0
  • 阿神

    阿神2017-04-17 11:37:14

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

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

    回覆
    0
  • 天蓬老师

    天蓬老师2017-04-17 11:37:14

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

    回覆
    0
  • 取消回覆