python學習筆記 異常處理

2022-07-20 11:03:11 字數 2946 閱讀 6349

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

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

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:

print

(e)except

keyerror as e:

print

(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:

print

(e)except

keyerror as e:

print

(e)except

valueerror as e:

print

(e)else

:

print('

try內**塊沒有異常則執行')

finally

:

print('

無論異常與否,都會執行該模組,通常是進行清理工作

')

例子5

try

:

raise typeerror('

型別錯誤')

except

exception as e:

print(e)

例子6

class

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