當前位置:首頁 > IT技術 > 編程語言 > 正文

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

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

目錄

語法錯誤(syntax error)

異常(exception)

處理異常

其他


語法錯誤(syntax error)

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

因為python是一種腳本,沒有python編譯器這種說法,只有python解釋器

所以python不存在編譯錯誤,只有解析錯誤

出現(xiàn)語法錯誤時,python解釋器會輸出出現(xiàn)錯誤的行

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

就像這樣

python 異常處理_try


異常(exception)

即便語句或表達式在語法上是正確的

然而當嘗試執(zhí)行腳本時,同樣可能會引起錯誤,這種錯誤就是異常(exceptions)

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

異常分很多種類,python解釋器會輸出內置異常的名稱給我們做參考

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

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


處理異常

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

python 異常處理_try_02

運行結果如下,當輸入的是int類型的數(shù)據(jù)時,break跳出while,運行成功

python 異常處理_except_03

當輸入的是非int類型時,程序會不斷提示你,直到你輸入正確的類型(當然我們可以用ctrl+C中斷運行)

python 異常處理_exception_04

實際上,用戶輸入ctrl+C中斷程序的運行

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

當我們處理異常時:

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

一個try后面可以跟著多個except語句

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

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

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

python 異常處理_異常_05

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

當然這也寫時要特別小心,因為這也寫可能會掩蓋程序真正的異常所在,最好在后面把異常raise回去,就像這樣:

python 異常處理_except_06

當出現(xiàn)I/Oerror時:

python 異常處理_exception_07

若出現(xiàn)ValueError時:

python 異常處理_python_08

python 異常處理_try_09

我們把程序稍微修改一下

python 異常處理_異常_10

此時,就會執(zhí)行第3個except中的語句

python 異常處理_python_11


其他

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

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

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

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

開通會員,享受整站包年服務立即開通 >