初學者phthon筆記(異常處理)

2021-10-04 03:28:33 字數 4493 閱讀 3475

各種異常

異常處理

在程式設計之路上,程式猿遇到各種異常而引起報錯是幾乎是每天都會發生的事。本篇文章就來總結一下在python中的錯誤與異常,已經它們的異常處理方法。

1、區分錯誤與異常

兩種錯誤(都必須改正):語法錯誤(**不規範,格式不對或缺少符號)、邏輯錯誤(邏輯不通)

異常:程式執行時發生錯誤的訊號

2、異常處理與注意事項

異常處理:程式設計師特意去捕捉異常,如果捕捉成功,就進入另外一段你定義的邏輯裡去執行,使程式不會崩潰

注意:異常處理的邏輯應該是與程式的主邏輯的分離開的;根本不會有人去用執行到一半就崩潰的軟體,所以我們必須提供一種異常處理機制來增強我們程式的健壯性和容錯性

1、常見異常

attributeerror試圖訪問乙個物件沒有的屬性,比如test.a,但是test沒有屬性a

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

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

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

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

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

keyboardinterruptctrl+c被按下

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

syntaxerrorpython**非法,**不能編譯(基本上就是語法錯誤)

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

unboundlocalerror試圖訪問乙個還未被設定的區域性變數,基本上是由於另有乙個同名的全域性變數,導致你以為正在訪問它

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

2、其他異常
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

這些異常都比較少見,所以也沒有必要全部列出來是哪方面的異常,太多了也記不住,所以可以遇到再去搜尋這些少見的異常的解決方案

1、if判斷式

while

true

: cou =

input

('請輸入你的賬號:\n'

)if cou.isdigit():

#主邏輯,如果全是數字才執行轉換int格式操作

int(cou)

break

#下面幾個就為異常準備的邏輯,在寫程式時就應該考慮到各種可能出現的異常

elif cou.isspace():

print

('賬號內不應有空格,請重新輸入'

)continue

elif

len(cou)==0

:print

('您輸入的長度為0,請重新輸入'

)elif cou.isalpha():

print

('賬號內不應有字母,請重新輸入'

)else

:print

('輸入內有其他非法輸入,請重新輸入'

)

執行結果:

if判斷式的缺點:只能針對某一段**,對於不同的**段的相同錯誤型別需需要寫重複的if來進行處理,顯得非常贅餘,可讀性極其差

2、try … except …異常處理

while

true

:try

:#主邏輯

cou =

input

('請輸入數字:\n'

)int

(cou)

cou2 =

input

('請再輸入數字:\n'

)int

(cou2)

except valueerror as e:

#valueerror是異常型別,表示如果出現值的異常,就執行except下的邏輯

print

(e,'請重新輸入'

)except keyerror as e:

#如果出現鍵的異常

print

(e,'請重新輸入'

)except indexerror as e:

#如果出現語法異常

print

(e,'請重新輸入'

)except exception as e:

#如果出現其他異常

print

(e,'請重新輸入'

)else

:print

('try內的**沒有異常就執行else'

)#沒有異常就會執行else的內容

finally

:print

('無論try中有無異常,finally都會執行'

)break

#常用來做清理記憶體操作,或者跳出迴圈

執行結果:

3、主動異常

name =

'viewin'

try:

raise typeerror(

'型別錯誤'

)#用raise主動觸發異常

except exception as e:

print

(e)

執行結果:

4、斷言

print

('---------------------------line1'

)assert1==

1print

('*************************==line2'

)#如果assert的表示式成立,則繼續執行,否則程式終止

#相當於if1

!=2:raise assertionerror #主動丟擲乙個異常

#斷言後面有一萬行**

執行結果:

Linux 初學者筆記

我是乙個徹底的linux初學這,從接觸到寫這個東西只有2天的時間。但是這兩天的時間真的又充實有快樂。我想把這兩天發生的是 些下來,對自己是個紀念 也希望對比我更初級的初級使用者有所幫助。這裡寫的方法都是在 http forum.ubuntu.org.cn 裡面搜到的方法!感謝這個論壇,感謝這裡面的熱...

初學者的筆記!!!

幾天不更新了!出差偷懶都是理由,主要是偷懶吧!出差只是乙個藉口!為了盡快學習 因為大公司進不去 所以主動來到一家小公司。本來以為會好好學 有大佬會貼身講解。但半個月的裝置除錯經歷讓我知道了,沒有這麼簡單。今天聽了好不容易可以聽一下大佬是怎麼改錯誤的。畢業兩年的大佬,也是我現在可以遇見的幾乎是最大的大...

初學者談初學者學html

這是乙個段落。解釋一下就是 html 與 html 之間的文字是描述網頁。head 與 head 之間的文字是文件的元資料。title 與 之間的文字是文件的標題。body 與 body 之間的文字是可見的頁面內容,是文章的主體部分。h1 與 h1 之間的文字被顯示為乙個大標題。p 與 p 之間的文...