當(dāng)前位置:首頁 > IT技術(shù) > 編程語言 > 正文

python 異常處理
2021-10-28 15:15:58

python中,至少有兩種可區(qū)分的錯(cuò)誤:語法錯(cuò)誤(syntax error)和異常(exceptions)

目錄

語法錯(cuò)誤(syntax error)

異常(exception)

處理異常

其他


語法錯(cuò)誤(syntax error)

語法錯(cuò)誤(syntax error)又稱為解析錯(cuò)誤(parsing error)

因?yàn)閜ython是一種腳本,沒有python編譯器這種說法,只有python解釋器

所以python不存在編譯錯(cuò)誤,只有解析錯(cuò)誤

出現(xiàn)語法錯(cuò)誤時(shí),python解釋器會(huì)輸出出現(xiàn)錯(cuò)誤的行

并顯示一個(gè)小箭頭,指向行中最早出現(xiàn)錯(cuò)誤的點(diǎn)

就像這樣

python 異常處理_try


異常(exception)

即便語句或表達(dá)式在語法上是正確的

然而當(dāng)嘗試執(zhí)行腳本時(shí),同樣可能會(huì)引起錯(cuò)誤,這種錯(cuò)誤就是異常(exceptions)

當(dāng)然,這些異常并非在所有情況下都是致命的

異常分很多種類,python解釋器會(huì)輸出內(nèi)置異常的名稱給我們做參考

異常的分類可以參見以下官方文檔:

https://docs.python.org/2/library/exceptions.html#bltin-exceptions


處理異常

和java類似,python中我們可以實(shí)現(xiàn)處理我們自己選定的異常,例如:

python 異常處理_try_02

運(yùn)行結(jié)果如下,當(dāng)輸入的是int類型的數(shù)據(jù)時(shí),break跳出while,運(yùn)行成功

python 異常處理_except_03

當(dāng)輸入的是非int類型時(shí),程序會(huì)不斷提示你,直到你輸入正確的類型(當(dāng)然我們可以用ctrl+C中斷運(yùn)行)

python 異常處理_exception_04

實(shí)際上,用戶輸入ctrl+C中斷程序的運(yùn)行

其本質(zhì)上也是昌盛了一種異常,也就是?KeyboardInterrupt 異常

當(dāng)我們處理異常時(shí):

  • try和except之間的語句被執(zhí)行
  • 若沒有異常發(fā)生,except語句將不被執(zhí)行
  • 若try和except之間的語句被執(zhí)行時(shí)發(fā)生了異常,則該部分剩下的語句不再被執(zhí)行,若except捕捉到了異常的類型,則直接跳轉(zhuǎn)去執(zhí)行except的語句,然后繼續(xù)執(zhí)行try和except之間剩下的語句
  • 若try和except之間的語句被執(zhí)行時(shí)發(fā)生了異常,則該部分剩下的語句不再被執(zhí)行,若except沒有捕捉到了異常的類型,那么這就是一個(gè)未被處理的異常(Unhandled exception),程序運(yùn)行被終止

一個(gè)try后面可以跟著多個(gè)except語句

用于指定處理不同類型的異常

但是只有一個(gè)exception中的語句會(huì)被執(zhí)行

一個(gè)exception也可以處理多種異常,我們可以用元組來完成(用圓括號(hào),這個(gè)不能漏掉),例如:

python 異常處理_異常_05

有的朋友們寫程序時(shí),喜歡在最后會(huì)加上一個(gè)省略異常名稱的except字句,作為通配符使用

當(dāng)然這也寫時(shí)要特別小心,因?yàn)檫@也寫可能會(huì)掩蓋程序真正的異常所在,最好在后面把異常raise回去,就像這樣:

python 異常處理_except_06

當(dāng)出現(xiàn)I/Oerror時(shí):

python 異常處理_exception_07

若出現(xiàn)ValueError時(shí):

python 異常處理_python_08

python 異常處理_try_09

我們把程序稍微修改一下

python 異常處理_異常_10

此時(shí),就會(huì)執(zhí)行第3個(gè)except中的語句

python 異常處理_python_11


其他

在except語句中,我們還可以在異常的后面指定變量

變量與異常的instance綁定(捕獲的異常也是對象)參數(shù)存儲(chǔ)在instance.args中

此外,我們還可以自己定義異常,這些高級(jí)的用法本文先不提了

本文摘自 :https://blog.51cto.com/u

開通會(huì)員,享受整站包年服務(wù)立即開通 >