Python 異常處理

2021-10-04 03:18:13 字數 2017 閱讀 1394

前言

程式設計總是會報錯的,之前有談過幾次異常的處理,現在再來說一說:

什麼是異常?

當 python 檢測到乙個錯誤時,直譯器就無法繼續執行了,並且給出乙個錯誤提示。比如寫入檔案的時候,磁碟滿了,寫不進去了,或者從網路抓取資料,網路突然中斷。這時候,就需要捕獲處理它,否則程式會終止執行。

異常處理

使用 try/except/finally 語句進行捕獲操作, 並告訴 python 發生異常時如何處理。

首先,檢測 try 語句塊中的錯誤,except 語句捕獲異常資訊並處理。如果在 try 子句執行時沒有發生異常,python 將執行 else 語句後的語句,然後控制流通過整個 try 語句。

如果在 try 後的語句裡發生了異常,卻沒有匹配的 except 子句,異常將被遞交到上層的 try,或者到程式的最上層,並列印預設的出錯資訊。

語法格式

try:

# 可能觸發異常的語句塊

except: # 後面跟乙個錯誤型別,當**發生錯誤且錯誤型別符合的時候,就會執行except中的**,不寫具體錯誤型別,表示接收任何型別的異常

# 這裡執行異常處理的相關**,列印輸出等

else:

# 如果沒有異常則執行else中的**

finally:

# 不管**是否異常,都會執行,一般是資源的關閉和釋放

excep 異常/錯誤 as 別名,使用別名接收異常物件的錯誤資訊。

如何捕獲多個異常?

寫出多行except 異常/錯誤,指定捕獲多個不同型別的異常。2. 使用 except (異常1,異常2…),使用元組,在一行中捕獲多個不同型別的異常。

異常捕獲示例**:

try

:print

(10/0)

except nameerror

:print

('出現 nameerror 異常'

)except zerodivisionerror

:print

('出現 zerodivisionerror 異常'

)except indexerror

:print

('出現 indexerror 異常'

)except exception as e

:print

('未知異常',e,type

(e))

finally

:print

('無論是否出現異常,該子句都會執行'

)

丟擲異常

我們使用 raise 語句觸發自定義異常。

語法格式:

raise 異常類名(附加異常資訊)

示例**:

s = "asdfghjklqwe"

try:

if len

(s) > 10:

raise exception

("超過10個字元"

)except exception as err

:print

(err)

示例**:

# 自定義異常類,建立乙個類繼承exception

class myerror

(exception)

: pass

def add

(a, b)

: # a小於0,丟擲異常

if a < 0:

raise myerror

('自定義的異常'

) return a + b

print

(add

(-1, 5)

)

異常定義好之後,與內建類的用法一樣,在需要的時候 raise 出來就可以了。

常見的使用異常的場景

•網路請求相關,比如網路超時、連線異常等。

•資源訪問相關,比如檔案的許可權問題、檔案的路徑、檔案是否存在等。

•**邏輯相關,比如越界訪問、keyerror 等。

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