在程式出現錯誤時,則會產生乙個異常,若程式沒有處理它,則會丟擲該異常,程式的執行也隨之終止
錯誤分兩種
1.語法錯誤(這種錯誤,根本過不了python直譯器的語法檢測,必須在程式執行前就改正)
2.邏輯錯誤
常見異常
attributeerror 試圖訪問乙個物件沒有的樹形,比如foo.x,但是foo沒有屬性xioerror 輸入/輸出異常;基本上是無法開啟檔案
importerror 無法引入模組或包;基本上是路徑問題或名稱錯誤
indentationerror 語法錯誤(的子類) ;**沒有正確對齊
indexerror 下標索引超出序列邊界,比如當x只有三個元素,卻試圖訪問x[5]
keyerror 試圖訪問字典裡不存在的鍵
keyboardinterrupt ctrl+c被按下
nameerror 使用乙個還未被賦予物件的變數
syntaxerror python**非法,**不能編譯(個人認為這是語法錯誤,寫錯了)
typeerror 傳入物件型別與要求的不符合
unboundlocalerror 試圖訪問乙個還未被設定的區域性變數,基本上是由於另有乙個同名的全域性變數,
導致你以為正在訪問它
valueerror 傳入乙個呼叫者不期望的值,即使值的型別是正確的
更多異常
arithmeticerrorassertionerror
attributeerror
baseexception
buffererror
byteswarning
deprecationwarning
environmenterror
eoferror
exception
floatingpointerror
futurewarning
generatorexit
importerror
importwarning
indentationerror
indexerror
ioerror
keyboardinterrupt
keyerror
lookuperror
memoryerror
nameerror
notimplementederror
oserror
overflowerror
pendingdeprecationwarning
referenceerror
runtimeerror
runtimewarning
standarderror
stopiteration
syntaxerror
syntaxwarning
systemerror
systemexit
taberror
typeerror
unboundlocalerror
unicodedecodeerror
unicodeencodeerror
unicodeerror
unicodetranslateerror
unicodewarning
userwarning
valueerror
warning
zerodivisionerror
如果錯誤發生的條件是可預知的,我們需要用if進行處理:在錯誤發生之前進行預防如果錯誤發生的條件是不可預知的,則需要用到try...except:在錯誤發生之後進行處理
1.異常類只能用來處理指定的異常情況,如果非指定異常則無法處理
2.多分支
3.萬能異常exception
4.也可以在多分支後來乙個exception
5.異常的其他機構
s1 = 'hello
'try
: int(s1)
except
indexerror as e:
(e)except
keyerror as e:
(e)except
valueerror as e:
(e)#
except exception as e:
#print(e)
else
:
print('
try內**塊沒有異常則執行我')
finally
:
print('
無論異常與否,都會執行該模組,通常是進行清理工作
')
6.主動觸發異常
try:
raise typeerror('
型別錯誤')
except
exception as e:
print(e)
7.自定義異常
在沒有合適的異常可使用時,自己定義乙個類,表示這個異常
classegonexception(baseexception):
def__init__
(self,msg):
self.msg=msg
def__str__
(self):
return
self.msg
try:
raise egonexception('
型別錯誤')
except
egonexception as e:
print(e)
8.斷言:assert 條件
意思是:我斷定這個程式執行之後或者之前會有這樣的結果,如果不是,那就扔出乙個錯誤。
info={}info[
'name
']='
egon'#
info['age']=18
#if 'name' not in info:
#raise keyerror('必須有name這個key')##
if 'age' not in info:
#raise keyerror('必須有age這個key')
assert ('
name
'in info) and ('
age'
ininfo)
if info['
name
'] == '
egon
'and info['
age'] > 10:
print('
welcome
')
如果條件滿足,就執行assert下面的條件語句,如果不滿足,就報錯,丟擲異常
9.總結try..except
1:把錯誤處理和真正的工作分開來
2:**更易組織,更清晰,複雜的工作任務更容易實現;
3:毫無疑問,更安全了,不至於由於一些小的疏忽而使程式意外崩潰了;
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...