一 定義
異常分為兩類:一類是自動觸發異常如除零錯誤;另一類是通過raise觸發。
二 為什麼要使用異常
- 當程式運作時,如果檢測到程式錯誤,Python就會引發異常,我們可以在程式中使用try語句捕獲異常,并對異常進行處理。如果我們不做異常的捕獲,異常就會一直往上層抛出,直到頂層Python的預設異常處理器,預設異常處理器将會停止程式并列印異常,這通常會引起程式崩潰,造成不好的使用者體驗,這不是我們想要的。
- 一個函數執行到中間某個部分時,出錯了如何跳出該函數呢,隻能通過抛出異常,讓函數跳出該函數,會跳到上一層捕獲到異常的地方執行
三 捕獲異常
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異常的基本知識,我将在下一篇進一步探讨異常