開發者學堂課程【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))
運作上述代碼即可實作使用自定義類抛出異常。