python中,至少有兩種可區(qū)分的錯誤:語法錯誤(syntax error)和異常(exceptions)
目錄
語法錯誤(syntax error)
語法錯誤(syntax error)又稱為解析錯誤(parsing error)
因為python是一種腳本,沒有python編譯器這種說法,只有python解釋器
所以python不存在編譯錯誤,只有解析錯誤
出現(xiàn)語法錯誤時,python解釋器會輸出出現(xiàn)錯誤的行
并顯示一個小箭頭,指向行中最早出現(xiàn)錯誤的點
就像這樣
異常(exception)
即便語句或表達式在語法上是正確的
然而當嘗試執(zhí)行腳本時,同樣可能會引起錯誤,這種錯誤就是異常(exceptions)
當然,這些異常并非在所有情況下都是致命的
異常分很多種類,python解釋器會輸出內(nèi)置異常的名稱給我們做參考
異常的分類可以參見以下官方文檔:
https://docs.python.org/2/library/exceptions.html#bltin-exceptions
處理異常
和java類似,python中我們可以實現(xiàn)處理我們自己選定的異常,例如:
運行結果如下,當輸入的是int類型的數(shù)據(jù)時,break跳出while,運行成功
當輸入的是非int類型時,程序會不斷提示你,直到你輸入正確的類型(當然我們可以用ctrl+C中斷運行)
實際上,用戶輸入ctrl+C中斷程序的運行
其本質(zhì)上也是昌盛了一種異常,也就是?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也可以處理多種異常,我們可以用元組來完成(用圓括號,這個不能漏掉),例如:
有的朋友們寫程序時,喜歡在最后會加上一個省略異常名稱的except字句,作為通配符使用
當然這也寫時要特別小心,因為這也寫可能會掩蓋程序真正的異常所在,最好在后面把異常raise回去,就像這樣:
當出現(xiàn)I/Oerror時:
若出現(xiàn)ValueError時:
我們把程序稍微修改一下
此時,就會執(zhí)行第3個except中的語句
其他
在except語句中,我們還可以在異常的后面指定變量
變量與異常的instance綁定(捕獲的異常也是對象)參數(shù)存儲在instance.args中
此外,我們還可以自己定義異常,這些高級的用法本文先不提了
本文摘自 :https://blog.51cto.com/u