python 之 異常處理

2022-03-04 13:38:03 字數 3968 閱讀 9555

在程式出現錯誤時,則會產生乙個異常,若程式沒有處理它,則會丟擲該異常,程式的執行也隨之終止

錯誤分兩種

1.語法錯誤(這種錯誤,根本過不了python直譯器的語法檢測,必須在程式執行前就改正)

2.邏輯錯誤

常見異常

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

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

importerror 無法引入模組或包;基本上是路徑問題或名稱錯誤

indentationerror 語法錯誤(的子類) ;**沒有正確對齊

indexerror 下標索引超出序列邊界,比如當x只有三個元素,卻試圖訪問x[5]

keyerror 試圖訪問字典裡不存在的鍵

keyboardinterrupt ctrl+c被按下

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

syntaxerror python**非法,**不能編譯(個人認為這是語法錯誤,寫錯了)

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

unboundlocalerror 試圖訪問乙個還未被設定的區域性變數,基本上是由於另有乙個同名的全域性變數,

導致你以為正在訪問它

valueerror 傳入乙個呼叫者不期望的值,即使值的型別是正確的

更多異常

arithmeticerror

assertionerror

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:

print

(e)except

keyerror as e:

print

(e)except

valueerror as e:

print

(e)#

except exception as e:

#print(e)

else

:

print('

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

finally

:

print('

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

')

6.主動觸發異常

try

:

raise typeerror('

型別錯誤')

except

exception as e:

print(e)

7.自定義異常

在沒有合適的異常可使用時,自己定義乙個類,表示這個異常

class

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