attributeerror 試圖訪問乙個物件沒有的樹形,比如foo.x,但是foo沒有屬性xioerror 輸入/輸出異常;基本上是無法開啟檔案
importerror 無法引入模組或包;基本上是路徑問題或名稱錯誤
indentationerror 語法錯誤(的子類) ;**沒有正確對齊
indexerror 下標索引超出序列邊界,比如當x只有三個元素,卻試圖訪問x[5]
keyerror 試圖訪問字典裡不存在的鍵
keyboardinterrupt ctrl+c被按下
nameerror 使用乙個還未被賦予物件的變數
syntaxerror python**語法錯誤
typeerror 傳入物件型別與要求的不符合
unboundlocalerror 試圖訪問乙個還未被設定的區域性變數,基本上是由於另有乙個同名的全域性變數,導致你以為正在訪問它
valueerror 傳入乙個呼叫者不期望的值,即使值的型別是正確的
try: 被檢測的**塊
except
異常型別:
try中一旦檢測到異常,就執行這個位置的邏輯
例子1,異常類只能用來處理指定的異常情況,如果非指定異常則無法處理。
s1 = 'hello
'try
: int(s1)
except indexerror as e: #
未捕獲到異常,程式直接報錯
print(e)
例子2
s1 = 'hello
'try
: int(s1)
except
indexerror as e:
(e)except
keyerror as e:
(e)except
valueerror as e:
print(e)
例子3
s1 = 'hello
'try
: int(s1)
except
exception as e:
print(e)
分析:多分支異常與萬能異常用處
如果你想要的效果是,無論出現什麼異常統一丟棄,或者使用同一段**邏輯去處理他們,那麼exception就足夠了。
如果你想要的效果是,對於不同的異常我們需要定製不同的處理邏輯,那就需要用到多分支。
例子4
s1 = 'hello
'try
: int(s1)
except
indexerror as e:
(e)except
keyerror as e:
(e)except
valueerror as e:
(e)else
:
print('
try內**塊沒有異常則執行')
finally
:
print('
無論異常與否,都會執行該模組,通常是進行清理工作
')
例子5
try:
raise typeerror('
型別錯誤')
except
exception as e:
print(e)
例子6
classegonexception(baseexception):
def__init__
(self,msg):
self.msg=msg
try:
raise egonexception('
型別錯誤')
except
egonexception as e:
print(e)
補充:斷言assert
#用法:assert 條件
assert 1 == 1
assert 1 == 2
try ...except方式的優勢
1:把錯誤處理和真正的工作分開來
2:**更易組織,更清晰,複雜的工作任務更容易實現;
3:毫無疑問,更安全了,不至於由於一些小的疏忽而使程式意外崩潰了;
if和try...except處理異常比較
try: "**
"except
typeerror:
"其他的邏輯
"except
keyerror:
"其他的邏輯2
"except exception:#
其他沒有考慮到的異常
"其他的邏輯3"if
"條件":
"**"elif
"其他的條件":
"其他的邏輯
"elif
"其他的條件2":
"其他的邏輯2
"else: #
其他沒有考慮到的條件
"其他的邏輯3
"
if本身就可以來處理一場,只不過if的方式,對於不同**段的同一種異常,要重複寫多分分支的if,而這會讓程式可讀性差
try...except的方式,是python提供給你一種特定的語法結構去做這件事,對於不同**的同一種異常,python為你定製了一種異常,乙個except就可以捕捉到。
try...except的多分支就好比if的多分支,if的else就好比try的exception。
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...