在 python 中,通過兩個重要的功能來處理程式在執行**現的異常和錯誤。其一是本文提到的異常處理,其二是斷言(assertions)。
python中,所有的異常均派生自 baseexception(所有異常的基類)類的例項,系統提供的異常類稱為內建異常,它們可通過直譯器或內建函式來生成。並且都會具有乙個提示導致錯誤詳細原因的「關聯值」。 這可以是乙個字串或由多個資訊項(例如乙個錯誤碼和乙個解釋錯誤的字串)組成的元組。 關聯值通常會作為引數被傳遞給異常類的構造器。
1、常見的處理異常的方式:
try
: 可能出錯的**塊
except 錯誤型別:
異常處理語句
除此之外,還有以下格式:1.
try...
except結構 異常處理結構中最常見也最基本的結構。2.
try...
except..
.else結構 帶else子句的異常處理結構,如果沒有異常則執行else語句。3.
try...
except..
.except..
.結構,多個except語句,同一段**可能會丟擲多個異常。4.
try...
except..
.finally結構,finally語句不論是否發生異常都會執行。
2、使用 except 捕獲異常
一般我們在 try 語句中放入可能會發生異常的**,一旦發生異常就會跳轉至 except 語句處,與相應的錯誤型別進行匹配。在找到對應錯誤型別後,執行對應語句處理異常。
exception 類是常規錯誤的基類。
a=
10b=
0try
: r=a/b
print
("a/b="
+r)except exception as e:
print
("異常:除數為0"
)輸出:
異常:除數為0
多重 except 捕獲不同種類異常與else 和 finally 的使用。a=
10b=
0try
: r=a//b
print
(r)except typeerror as e:
print
("這是:型別錯誤"
)except zerodivisionerror:
print
("這是:0判斷"
)else
:# 如果不發生錯誤,執行
print
("這是:else"
)finally
:# 無論是否發生錯誤,一定會執行
print
("這是:finally"
)輸出:
這是:0判斷
這是:finally
3、自定義錯誤型別
內建異常類可以被子類繼承以定義新的異常。即我們可以從 exception 類或它的某個子類派生出新的異常型別。
# 自定義錯誤型別
class
err(exception)
:def
__init__
(self,msg)
: self.msg=msg
try:
raise err(
"這是自定義錯誤"
)# 丟擲異常,類似c++中的throw
except err as e:
print
(e)輸出:
這是自定義錯誤
基類
1. 下列異常主要被用作其他異常的基類。
具體異常:
2.以下異常屬於經常被引發的異常。
os 異常
下列異常均為 oserror 的子類,它們將根據系統錯誤**被引發。
警告以上內容只列出部分,詳情請參考 python 官方文件。
附:內建異常:
python學習筆記 異常處理
try 多個except else finally語句 try 塊是此語句的主要動作,嘗試執行的 except分句捕獲且處理try 塊內引發的異常,else分句是try沒有發生異常時要執行的處理器。finally語句不管異常是否發生都會去執行的,如果沒有異常發生,執行完try 塊後執行finally...
python學習筆記 異常處理
什麼是異常 異常就是程式執行時發生錯誤的訊號 在程式出現錯誤時,則會產生乙個異常,若程式沒有處理它,則會 丟擲該異常,程式的執行也隨之終止 語法錯誤 不按照語言基準來寫 print hello 邏輯錯誤 res 1 0 zerodivisionerror l 1.2 l 10 indexerror ...
python學習筆記 異常處理
assertionerror 斷言語句失敗 attributeerror 嘗試訪問未知的物件屬性 indexerror 索引超出序列的範圍 keyerror 字典中查詢乙個不存在的關鍵字 nameerror 嘗試訪問乙個不存在的變數 oserror 作業系統產生的異常 syntaxerror pyt...