Python基礎之異常定義

2022-07-13 10:18:09 字數 1872 閱讀 9475

在各類python的專案中,總會涉及到專案自身相關的一些約束條件。這些約束條件體現在,當使用者輸入的引數或者檔案不符合專案要求時,就拒絕這個引數的輸入並且播報出來,提醒使用者自行修改,而這一過程就是python的異常定義與捕獲所提供的功能。python的異常捕獲與定義,是乙個比較基礎的話題,在其他的程式語言中也會有涉及到類似的操作。

這裡我們直接給出乙個定義異常的例項:

# exception.py

class 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.py

class 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的方法進行了捕獲和抑制,因此程式後面的部分還是會繼續執行的。

本文首發鏈結為:

作者id:dechinphy

更多原著文章請參考:

python基礎之異常

語法 try 嘗試執行的 except 出現錯誤的處理 try 嘗試執行的 except 錯誤型別1 針對錯誤型別1,對應的 處理 except 錯誤型別2,錯誤型別3 針對錯誤型別2和3,對應的 處理 except exception as result print 未知錯誤 s result e...

python基礎之異常

print hello try try中放置的是有可能出現錯誤的 print 10 0 except except中放置的是出錯以後的處理防暑 print 哈哈哈,出錯了 else print 程式正常執行沒有錯誤 print 你好 print 10 0 def fn print hello fn ...

Python基礎之異常

異常是程式執行時發生錯誤的訊號,每當發生讓python不知所措的錯誤時,都會建立乙個建立乙個異常物件。若異常未處理,程式將停止執行,並顯示乙個traceback n elk n 儲存的是 elk 再將它轉換成int時,將丟擲乙個異常 int n 以下為執行結果 attributeerror 試圖訪問...