Python之異常處理

2022-07-11 08:30:14 字數 3782 閱讀 7225

python 異常處理

1.捕獲異常  (作用:程式執行過程中,可能會出現意想不到的異常,如果異常未被解決,程式會崩潰,停止執行)

#

例如,以下例子

a='name

'print(a[10]) #

報錯:indexerror: string index out of range

print('

今天是個好天氣

') #

報錯後面的程式將不會執行

所以,異常處理就顯得很有必要

捕獲異常的基礎語法:

1.處理異常定義,如果出現異常,我們會讓它按照事先規定的規則去執行對應的操作,從而記錄報錯的log日

2.語法:

try(要執行有可能出現異常的**):

(縮排)存放可能出現報錯的**模組

except(異常):

(縮排)出現異常的時候要執行的**(執行的操作),記錄日誌

一旦try裡面的**報錯,會立即跳到except,try報錯**的下面的剩餘語句將不會執行

try

: a = '

name

'print(a[10])

print('

今天是個好天氣')

except

:

print('

try模組存在報錯,後續程式不能被執行')

輸出結果:

try模組存在報錯,後續程式不能被執行

3.如果try模組下的**沒有出現異常,則正常執行,不會執行except模組下的**

try

: a = '

name

'print(a[2])

print('

今天是個好天氣')

except

:

print('

try模組存在報錯,後續程式不能被執行')

輸出結果:

m今天是個好天氣

4.一般,在寫異常處理模組時,都要預先考慮到,可能會出現報錯的地方,然後將其放到try裡面,從而防止報錯影響程式的整體執行

#

前期預判

a = '

name

'print(a[2]) #

a變數是乙個字串,根據索引值取字串的值,所以可能存在索引值超出字串的長度的報錯

print('

今天是個好天氣')

#案例二

b=12c=23

print(b*c)

#b和c都是變數,如果給予b和c賦予的資料型別非int和float型別,那就會報資料型別的錯誤,所以此處就需要加異常處理

5.使用try......except......語句捕獲了異常,但是不清楚是**出現問題,是資料型別錯誤、超出範圍錯誤還是其他的錯誤等等

面對以上的問題,可以使用 except  exception as err:將錯誤型別賦值給err  ,列印出來

try

: a = '

name

'print(a[20])

print('

今天是個好天氣')

except

exception as err:

print('

try模組存在報錯{},後續程式不能被執行

'.format(err))

輸出結果:

try模組存在報錯string index out of range,後續程式不能被執行

注意:工作當中,最好用以上的方法捕獲異常,這樣就可以很直觀的看到報錯的內容,也好定位問題

6.捕獲異常的高階:指明出現的異常型別

方法:先不加異常,執行**,檢視程式可能出現的報錯型別,然後將報錯的型別加入except 語句中就行

語法:try:

(縮排)執行的**模組

except  報錯型別  as  err:

(縮排)print('異常{}'.format(err))

finally:    ---------------->該模組屬於,不管有沒有報錯,裡面的**都會被執行

(縮排)  print('你好世界')

lst = ['

hello']

a = 4b =0

try:

print(a/b)

print(lst[2])

except

indexerror as err:

print('

出現了異常:{}

'.format(err))

except

zerodivisionerror as err:

print('

出現除法異常:{}

'.format(err))

finally

:

print('

hello wold')

#結果:

'''出現除法異常:division by zero

出現除法異常:division by zero

hello wold

'''

7.手動丟擲異常 raise

raise手動丟擲異常,讓程式終止執行

def

join_team(age,gender):

if age > 22:

raise valueerror('

年齡要小於22')

print('

可以加入team')

print(join_team(23,'

girl'))

'''raise valueerror('年齡要小於22')

valueerror: 年齡要小於22

'''

8.錯誤型別介紹(以下錯誤型別,可以接下來了解使用)

importerror :無法引入模組或包

indexerror:下標索引超出序列邊界

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

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

syntaxerror:**邏輯語法錯誤,不能執行,不能捕獲

valueerror:傳入乙個不被期望的值,即使型別不正確

keyerror:試圖訪問你字典裡不存在的key

ioerror:輸入輸出異常,檔案操作

9.異常分組

好處:如果我們發現了乙個驗證級別為阻塞級別的bug,簡訊通知開發人員馬上集合解決問題,如果不同的錯誤型別,異常處理的行為是一樣的,組合起來,就可以簡化**

try

: 1 /0

['hello

'][3]

['age'

]except

(indexerror,keyerror) as e:

'簡訊通知這裡出現很嚴重的問題

'print('

可以捕獲indexerror和keyerror')

except

zerodivisionerror as e:

'記錄日誌

'print('

除法出現異常{}

'.format(e))

最好不要直接用exception,因為可以報錯異常,但是也不知道報的是什麼異常,再次排查問題時,會很浪費時間

python之異常處理 Python之異常處理

異常物件 請大家執行如下 a 100 0 print a 就會發現直譯器顯示如下的錯誤提示 traceback most recent call last file x.py line 1,in a 100 0 zerodivisionerror division by zero 大家要學會看直譯器...

Python之異常處理

在程式執行過程中影響程式正常執行的內容,稱為異常 nameerror print a indexerror 索引錯誤 li 1,2,3,4 print li 8 keyerror d dict a 1,b 2 print d f zerodivisionerror 除0錯誤 print 10 2 2...

Python之異常處理

try ret int input num 正常執行的 print ret except valueerror 捕捉錯誤 print 請輸入數字 try ret int input num 正常執行的 print ret except valueerror 捕捉錯誤 print 請輸入數字 exce...