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手動丟擲異常,讓程式終止執行
defjoin_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...