Python 異常處理

2022-06-14 03:54:11 字數 4970 閱讀 7958

下面看乙個簡單例子:

data = {}

try:

data["name"]

except keyerror as e: #e是錯誤的相信資訊,錯誤的原因

print("沒有這個key",e)

執行結果如下:

沒有這個key 'name'

從上面結果可以看出,當出現錯誤的時候,我們可以使用try.....except來規避錯誤,不讓程式報錯。能夠繼續執行。其中as e是錯誤的明細,原因。

多種錯誤撲捉的方法:(1)

data = {}

try:

data["name"]

except keyerror as e: #e是錯誤的相信資訊,錯誤的原因

print("沒有這個key",e)

except indexerror as e:

print("列表索引錯誤",e)

多種錯誤撲捉方法:(2)   

data = {}

names =

try:

names[1]

except (indexerror,keyerror) as e: #e是錯誤的相信資訊,錯誤的原因

print("列表索引錯誤",e)

把多種錯誤原因放到元素中,自動查詢術語那種錯誤。

exception抓取基本上所有的錯誤,一般情況下不建議使用,使用的話放在最後,上面的錯誤都抓取不到的時候,就最後抓取一次。

異常

try:

code

except (error1,error2) as e:

print(e)

except exception:抓取所有錯誤,一般不建議使用,使用放在最後一次抓取上。如下:

data = {}

names =

num = 1

try:

num/0

except (indexerror,keyerror) as e: #e是錯誤的相信資訊,錯誤的原因

print("列表索引錯誤",e)

except filenotfounderror as e:

print("檔案不存在",e)

except exception as e:

print("未知錯誤",e)

執行結果如下:

未知錯誤 division by zero

上面**中,except exception就是用來處理上面所有的情況都抓取不到錯誤的時候執行的。經常就是所有努力都失敗了才執行。

下面來看一下單元測試,我們經常會測試**,如果出錯了執行錯誤,如果沒有出錯,告訴我們沒有問題,如下,**測試:

data = {}

names =

num = 1

try:

num/0

except (indexerror,keyerror) as e: #e是錯誤的相信資訊,錯誤的原因

print("列表索引錯誤",e)

except filenotfounderror as e:

print("檔案不存在",e)

except exception as e:

print("未知錯誤",e)

else:

print("一切ok")

執行結果如下:

未知錯誤 division by zero

上面**中,我們知道1/0肯定是會報錯的,因為會執行最後乙個錯誤。但是else語句會執行嗎?可以從執行結果看沒有執行,那麼我們來看下正確的情況下:

data = {}

names =

num = 1

try:

num/1

except (indexerror,keyerror) as e: #e是錯誤的相信資訊,錯誤的原因

print("列表索引錯誤",e)

except filenotfounderror as e:

print("檔案不存在",e)

except exception as e:

print("未知錯誤",e)

else:

print("一切ok")

執行結果如下:

一切ok

從**的執行結果可以看出,當沒有錯誤的時候,執行了else語句,由此我們可以看出,當程式執行遇到錯誤的時候執行錯誤,不會執行else語句,當程式執行正常的時候,會執行else語句,告訴我們程式沒有出現異常錯誤。這種情況常用在測試上,錯誤返回錯誤,正常返回正常。

下面來看下無論是否出錯都執行的,finally:

沒有異常的時候:

data = {}

names =

num = 1

try:

num/1

except (indexerror,keyerror) as e: #e是錯誤的相信資訊,錯誤的原因

print("列表索引錯誤",e)

except filenotfounderror as e:

print("檔案不存在",e)

except exception as e:

print("未知錯誤",e)

else:

print("一切ok")

finally:

print("不管有沒有錯,都執行!!!")

執行結果如下:

一切ok

不管有沒有錯,都執行!!!

上面可以看出,**沒有異常的時候執行了finally語句。

下面來看下,**正常的時候的情況:

data = {}

names =

num = 1

try:

num/0

except (indexerror,keyerror) as e: #e是錯誤的相信資訊,錯誤的原因

print("列表索引錯誤",e)

except filenotfounderror as e:

print("檔案不存在",e)

except exception as e:

print("未知錯誤",e)

else:

print("一切ok")

finally:

print("不管有沒有錯,都執行!!!")

執行結果如下:

未知錯誤 division by zero

不管有沒有錯,都執行!!!

從上面執行結果可以看出,當錯誤的時候,else語句沒有執行,但是finally語句繼續執行。說明無論什麼樣的情況下,finally語句都會正常執行。

python中的異常種類非常多,每個異常專門用於處理某一項異常!!!

attributeerror 試圖訪問乙個物件沒有的樹形,比如foo.x,但是foo沒有屬性x

ioerror 輸入/輸出異常;基本上是無法開啟檔案

importerror 無法引入模組或包;基本上是路徑問題或名稱錯誤

indentationerror 語法錯誤(的子類) ;**沒有正確對齊

indexerror 下標索引超出序列邊界,比如當x只有三個元素,卻試圖訪問x[5]

keyerror 試圖訪問字典裡不存在的鍵

keyboardinterrupt ctrl+c被按下

nameerror 使用乙個還未被賦予物件的變數

syntaxerror python**非法,**不能編譯(個人認為這是語法錯誤,寫錯了)

typeerror 傳入物件型別與要求的不符合

unboundlocalerror 試圖訪問乙個還未被設定的區域性變數,基本上是由於另有乙個同名的全域性變數, 導致你以為正在訪問它

valueerror 傳入乙個呼叫者不期望的值,即使值的型別是正確的

自定義異常:

我們在連線資料庫的時候,如果連線錯誤,會出現異常,這種異常python自帶的異常是抓取不到的,因此只能自己抓取。這個時候就需要自定義異常。如下:

class mysqlconnecterror(exception):

def __init__(self, msg):

self.message = msg

def __str__(self):

return self.message

try:

raise mysqlconnecterror('我的異常')

except mysqlconnecterror as e:

print(e)

執行結果如下:

我的異常

上面就是自己定義的異常處理情況。

總結如下

except語句不是必須的,finally語句也不是必須的,但是二者必須要有乙個,否則就沒有try的意義了。

except語句可以有多個,python會按except語句的順序依次匹配你指定的異常,如果異常已經處理就不會再進入後面的except語句。

except語句可以以元組形式同時指定多個異常,參見例項**。

except語句後面如果不指定異常型別,則預設捕獲所有異常,你可以通過logging或者sys模組獲取當前異常。

如果要捕獲異常後要重複丟擲,請使用raise,後面不要帶任何引數或資訊。

不建議捕獲並丟擲同乙個異常,請考慮重構你的**。

不建議在不清楚邏輯的情況下捕獲所有異常,有可能你隱藏了很嚴重的問題。

盡量使用內建的異常處理語句來 替換try/except語句,比如with語句,getattr()方法。

python異常處理 Python 異常處理

使用者輸入不完整 比如輸入為空 或者輸入非法 輸入不是數字 異常就是程式執行時發生錯誤的訊號,在python中,錯誤觸發的異常如下 在python中不同的異常可以用不同的型別 python中統一了類與型別,型別即類 去標識,不同的類物件標識不同的異常,乙個異常標識一種錯 觸發indexerror 觸...

python異常舉例 Python異常處理

1.1異常問題舉例 例一 i input 請輸入數字 請輸入數字 0 print i print 5 int i traceback most recent call last file line 1,in zerodivisionerror division by zero 上述 的報錯是除零的錯...

python異常處理

當你的程式中出現異常情況時就需要異常處理。比如當你開啟乙個不存在的檔案時。當你的程式中有一些無效的語句時,python會提示你有錯誤存在。下面是乙個拼寫錯誤的例子,print寫成了print。python是大小寫敏感的,因此python將引發乙個錯誤 print hello world file l...