Python基礎之異常定義
baseexception是什麼意思
目錄
技術背景
異常定義例項
列印完整異常資訊
總結概要
版權宣告
參考連結
技術背景
在各類python的專案中,總會涉及到專案自身相關的一些約束條件。這些約束條件體現在,當用戶輸入的引數或者檔案不符合專案要求時,就拒絕這個引數的輸入並且播報出來,提醒使用者自行修改,而這一過程就是python的異常定義與捕獲所提供的功能。python的異常捕獲與定義,是一個比較基礎的話題,在其他的程式語言中也會有涉及到類似的操作。
異常定義例項
這裡我們直接給出一個定義異常的例項:
# exception。pyclass NewError(BaseException): def __init__(self, args): self。args = list(args) print (‘\033[1;31m NewError Raised: \033[0m’)if __name__ == ‘__main__’: try: raise NewError(“Test Error”) except NewError as e: print (e。args)
在這個例項中,我們定義了一個新的異常
NewError
,這個類繼承自
BaseException
,是所有異常的基類。關於更多的異常類,可以參考本文的參考連結2,其中有比較詳細的介紹。回到上面的這個案例,我們定義了一個有入參的異常類,也就是說可以跟使用者的輸入引數進行關聯,以提醒是哪一個使用者輸入的引數導致了這個異常的出現。在這個異常中我們可以列印一些基礎資訊,這裡我們簡單地用
NewError Raised
來描述,同時我們給這個print輸出加上了紅色,大致效果如下:
這裡的
31
就是定義的紅色的意思,關於其他顏色的定義可以參考如下的表格(表格來源於參考連結1):
列印完整異常資訊
上述的例項中由於捕獲了異常資訊,其實同時也對這個異常進行了抑制,如果不進行抑制就會彈出Traceback之類的資訊並且中斷程式的執行。這裡我們參考部落格中所演示的一個方案,採用traceback類來播報異常資訊,但不終止程式的執行。針對上述程式碼修改後如下所示:
# exception。pyclass NewError(BaseException): def __init__(self, args): self。args = list(args)if __name__ == ‘__main__’: try: raise NewError(“Test Error”) except NewError as e: import traceback traceback。print_exc()
在修改的例項中我們去掉了異常類內部的列印以及原來在except下的列印,採用traceback來包含所有的異常資訊,輸出如下:
[dechin-20n2s01200 exception]# python3 exception。py Traceback (most recent call last): File “exception。py”, line 9, in
當然,這裡我們需要再次提醒的是,雖然看起來異常資訊播報與程式出現異常一致,但是由於這裡先用try的方法進行了捕獲和抑制,因此程式後面的部分還是會繼續執行的。
總結概要
本文中介紹了常規python中的異常的定義方法,可以在自己的python專案中定製化的實現一些異常類。在定製化的類中我們可以給列印資訊加上一些醒目的顏色,用於提醒使用者以促進問題的修改。
版權宣告
本文首發連結為:https://www。cnblogs。com/dechinphy/p/exception。html
作者ID:DechinPhy
更多原著文章請參考:https://www。cnblogs。com/dechinphy/
參考連結
https://blog。csdn。net/wls666/article/details/100867234
https://www。runoob。com/python/python-exceptions。html