天天看點

Python之異常設計(一)

一 定義

異常分為兩類:一類是自動觸發異常如除零錯誤;另一類是通過raise觸發。

二 為什麼要使用異常

  1. 當程式運作時,如果檢測到程式錯誤,Python就會引發異常,我們可以在程式中使用try語句捕獲異常,并對異常進行處理。如果我們不做異常的捕獲,異常就會一直往上層抛出,直到頂層Python的預設異常處理器,預設異常處理器将會停止程式并列印異常,這通常會引起程式崩潰,造成不好的使用者體驗,這不是我們想要的。
  2. 一個函數執行到中間某個部分時,出錯了如何跳出該函數呢,隻能通過抛出異常,讓函數跳出該函數,會跳到上一層捕獲到異常的地方執行

三 捕獲異常

try:
    list=[2]
    print(list[1]
except IndexError:
    print('goto exception')      

四 引發異常

try
    raise IndexError
except IndexError:
    print('goto exception')      

raise 傳遞異常有三種方式

1、raise <instense> 給raise提供一個執行個體, 當引發異常的時候,如果except中包含了as子句,as 後的變量将會被配置設定給該執行個體

2、raise <class>  如果raise一個類,python會調用不帶參數的構造函數建立一個被引發的執行個體

3、raise  用于重新引發異常,如果捕獲到異常後,還需要将該異常再往上抛,就可以使用這種方式

五 自定義異常

class MyException(Exception)
    pass

def raise_error():
    raise MyException()

try:
    raise_error()
except MyException:
    print('goto ')      

六 終止行為 finally

可以通過finally定義不管是否發生異常都執行的行為。當發生異常時,執行finally塊中的代碼,然後将異常往上抛。比如,我們想要在調用的函數執行完或發生異常時,釋放資料庫連接配接或確定檔案關閉,就可以在finally中來實作

try:
    raise IndexError
finally:
    pass      

py2.6和py3引入了with/as語句,as是可選的,可作為try/finally用法的替代。with/as用于執行一些必須“終止”或“清理”的行為,無論是否引發異常都會進行“終止”或“清理”行為

以上是Python異常的基本知識,我将在下一篇進一步探讨異常