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輸出加上了紅色,大致效果如下:

Python基礎之異常定義

這裡的

31

就是定義的紅色的意思,關於其他顏色的定義可以參考如下的表格(表格來源於參考連結1):

Python基礎之異常定義

列印完整異常資訊

上述的例項中由於捕獲了異常資訊,其實同時也對這個異常進行了抑制,如果不進行抑制就會彈出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 raise NewError(“Test Error”)NewError: (‘T’, ‘e’, ‘s’, ‘t’, ‘ ’, ‘E’, ‘r’, ‘r’, ‘o’, ‘r’)

當然,這裡我們需要再次提醒的是,雖然看起來異常資訊播報與程式出現異常一致,但是由於這裡先用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