天天看點

自定義異常處理|學習筆記

開發者學堂課程【Python 語言基礎 3:函數、面向對象、異常處理:自定義異常處理】學習筆記,與課程緊密聯系,讓使用者快速學習知識。

課程位址:

https://developer.aliyun.com/learning/course/601/detail/8765

自定義異常處理

目錄:

一、 raise 語句實作抛出異常對象

二、 if……else…… 語句實作抛出異常對象

三、 自定義類實作抛出異常

了解異常處理方式之後,本課時内容學習 Python 中如何實作抛出異常,也即使用者自定義異常對象。

一、raise 語句實作抛出異常現象

可以使用 raise 語句來抛出異常,raise 語句後需要跟一個異常類或者異常的執行個體。目的是當運算中出現負數時向外抛出異常,raise 語句實作抛出異常實作代碼如下:

def add(a,b):

#如果a和b中有負數,就向調用出抛出異常

​​​

If a < 0 or b < 0;

# raise 用于向外部抛出異常,後面可以跟一個異常類或者異常類的執行個體。

​​

Raise Exception

r = a+b

return r

print(add(123,456))

運作上述代碼結果正常,輸出結果 579。

如果将輸出結果​

print(add(123,456))

​改寫為

print(add(-123,456))

​運作結果就會抛出異常,但是此時應該注意的抛出的異常沒有資訊,因為現在傳的是一個類,執行個體是由解析器自己建立的,如若想傳遞資訊,則 raise Exception 處代碼需改寫為:​

raise Exception

​(‘二個參數中不能有負數!’),運作代碼後即可傳遞出資訊:二個參數中不能有負數!是以,在此我們可以手動的向外部使用 raise 抛出異常資訊。

接着我們分析為何我們在此處抛出異常,我們抛出異常的目的,是告訴外部此處存在問題,希望引起注意并加以處理。此處抛出目的僅僅是抛出異常而不處理異常結果。

二、if……else…… 語句實作抛出異常對象

對于異常的處理我們也可以使用 if……else…… 來代替異常處理,如上述 raise 抛出異常也可以使用以下代碼代替:

def add(a,b):

#如果a和b中有負數,就向調用出抛出異常

If a < 0 or b < 0;

# 通過if……else……來代替異常的處理

Return None

r = a+b

return r

print(add(-123,456))

運作結果為 “None”

需要注意的是,如果運作結果不需要處理,此處可以使用 if……else…… 代替 raise,如果此處異常結果對後面影響嚴重需要處理,則需要使用 raise 抛出異常,引起注意并加以處理,以免引起對後面代碼運作産生影響。

綜述,raise 抛出異常是提醒代碼運作者注意此處異常并加以注意。

三、自定義類實作抛出異常

但是 raise Exception 并不能回報異常的類型,有時我們希望如果是變量的錯,我們抛出 NameError;如果是索引錯誤,我們抛出 IndexError。如若實作這中目的,也是可以是實作,隻需建立一個類繼承 Exception 即可。實作代碼如下:

class Myerror(Exception):

pass

def add(a,b):

#如果 a 和 b 中有負數,就向調用出抛出異常

If a < 0 or b < 0;

# raise 用于向外部抛出異常,後面可以跟一個異常類或者異常類的執行個體。

Raise Myerror(‘自定義的異常‘)

r = a+b

return r

print(add(123,456))

運作上述代碼即可實作使用自定義類抛出異常。