Python有許多內置的異常,當其中的某些錯誤出現(xiàn)時,它們會強制您的程序輸出錯誤。
但是,有時您可能需要創(chuàng)建符合您目的的自定義異常處理。
在Python中,用戶可以通過創(chuàng)建新類來定義此類異常。該異常類必須直接或間接地從Exception該類派生。大多數(shù)內置異常也是從此類派生的。
>>> class CustomError(Exception): ... pass ... >>> raise CustomError Traceback (most recent call last): ... __main__.CustomError >>> raise CustomError("An error occurred") Traceback (most recent call last): ... __main__.CustomError: An error occurred
在這里,我們創(chuàng)建了一個名為CustomError的用戶定義異常,該異常是從Exception類派生的。 與其他異常一樣,可以使用帶有可選錯誤消息的raise語句來引發(fā)此新異常。
當我們開發(fā)大型Python程序時,最好將程序引發(fā)的所有用戶定義的異常放在單獨的文件中。許多標準模塊可以做到這一點。他們分別將例外定義為exceptions.py或errors.py。
用戶定義的異常類可以實現(xiàn)普通類可以執(zhí)行的所有操作,但是我們通常使它們簡單明了。大多數(shù)實現(xiàn)都聲明一個自定義基類,并從該基類派生其他異常類。在下面的示例中,將使該概念更清晰。
在此示例中,我們將說明如何在程序中使用用戶定義的異常來引發(fā)和捕獲錯誤。
該程序將要求用戶輸入一個數(shù)字,直到他們正確猜出所存儲的數(shù)字為止。為了幫助他們弄清楚,將提示他們的猜測是大于還是小于存儲的數(shù)字。
# 定義Python用戶定義的異常 class Error(Exception): """其他異常的基類""" pass class ValueTooSmallError(Error): """當輸入值太小時引發(fā)""" pass class ValueTooLargeError(Error): """當輸入值過大時引發(fā)""" pass # 我們的主程序 # 用戶猜出一個數(shù)字,直到他/她猜對為止 # 你需要猜這個數(shù)字 number = 10 while True: try: i_num = int(input("輸入數(shù)字: ")) if i_num < number: raise ValueTooSmallError elif i_num > number: raise ValueTooLargeError break except ValueTooSmallError: print("這個值太小,請再試一次!") print() except ValueTooLargeError: print("這個值太大,請再試一次!") print() print("恭喜你! 你猜對了.")
這是該程序的示例運行。
輸入數(shù)字: 12 這個值太大,請再試一次! 輸入數(shù)字: 0 這個值太小,請再試一次! 輸入數(shù)字: 9 這個值太小,請再試一次! 輸入數(shù)字: 10 恭喜你! 你猜對了.
在這里,我們定義了一個名為Error的基類。
我們的程序實際引發(fā)的另外兩個異常(ValueTooSmallError和ValueTooLargeError)是從這個類派生出來的。這是在Python編程中定義用戶定義異常的標準方法,但您并不僅限于此方法。
訪問此頁面以詳細了解如何處理Python中的異常。