天天看點

自定義異常對象 | Python從入門到精通:高階篇之四十三

異常對象 | Python從入門到精通:高階篇之四十二

抛出異常

可以使用 raise 語句來抛出異常,raise語句後需要跟一個異常類 或 異常的執行個體。

def add(a,b):
        r = a + b
        return r

print(add(123,456))           

執行結果:

自定義異常對象 | Python從入門到精通:高階篇之四十三

我們現在不希望a和b有負數,如果a和b中有負數,就向調用處抛出異常。

def add(a,b):
    if a < 0 or b < 0:
        raise Exception    
    r = a + b
    return r

print(add(-123,456))           
自定義異常對象 | Python從入門到精通:高階篇之四十三

此時發現抛出的異常并沒有具體的異常資訊,是因為現在是一個類,如果想輸出異常資訊需要建立執行個體。

raise Exception('兩個參數中不能有負數!')              
自定義異常對象 | Python從入門到精通:高階篇之四十三

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

一般而言,我們并不想程式中出現異常,那為什麼還要将異常抛出呢?

抛出異常的目的,告訴調用者這裡調用時出現問題,希望可以處理一下。

例如:我們針對上述代碼,隻是希望是兩個正數相加,如果負數出現了,此時函數内部是決定不了該如何處理的,是以應該告知調用者,由調用者決定。

此時除了異常外,還有另外一種方法:

def add(a,b):
    if a < 0 or b < 0:
        return None  
    r = a + b
    return r

# print(add(123,456))
print(add(-123,456))           
自定義異常對象 | Python從入門到精通:高階篇之四十三
自定義異常對象 | Python從入門到精通:高階篇之四十三

是以也可以通過if else來代替異常的處理。

但是如果項目中的問題比較大,異常必須處理的情況下使用if else 去作為異常處理,傳回的結果如果沒有處理,程式繼續執行問題可能會更加嚴重,但是抛出異常則會更靈活,強制去處理異常,保證程式的正常執行。

自定義異常類

我們也可以自定義異常類,隻需要建立一個類繼承Exception即可。

class MyError(Exception):
    pass

def add(a,b):
    if a < 0 or b < 0:
        raise MyError('自定義的異常')  
    r = a + b
    return r

print(add(-123,456))           
自定義異常對象 | Python從入門到精通:高階篇之四十三

配套視訊課程,點選這裡檢視

擷取更多資源請訂閱

Python學習站