通常狀況下,變量是在定義以後才能進行調用的,這裏咱們示範一個錯誤,並對這個異常進行處理。代碼以下所示:python
運行後,報錯信息以下:單元測試
咱們能夠發現,報錯信息提示:變量 a 未定義,因此在引用時纔會報錯。學習
若是咱們不想代碼運行到這裏中止運行或者不想看到這個錯誤,就可使用try ... except 語句來捕獲這個錯誤,告訴python程序,若是遇到這個錯誤,該怎麼處理,代碼以下:測試
運行後的結果是:spa
try ... except ... 就可讓python代碼中遇到的問題直接抓到,並進行處理,而後讓程序得以繼續運行。3d
在講帶有錯誤類型的 try ... except ... 代碼塊以前,咱們先來了解一下常見的錯誤類型,以便咱們更好的理解後面的內容。日誌
常見的錯誤類型:對象
1)帶有萬能錯誤基類的代碼blog
在上面咱們已經瞭解了python中常見的錯誤類型,可是若是做爲新手的你不是很肯定錯誤的類型,就可使用萬能的錯誤基類來編寫代碼。索引
咱們還使用上面打印一個未定義變量的例子來進行演示和說明,具體的代碼以下:
運行代碼後,結果以下:
2)帶有對應錯誤類型的代碼
仍是使用 a 變量未定義的例子來進行說明,咱們採用NameError來捕捉異常,並進行處理,具體的代碼以下:
這裏except後面跟的是指定的對應錯誤基類,咱們捕捉到的錯誤,並將錯誤存儲到變量e裏面,在except下面的代碼中對錯誤內容e進行輸出,運行代碼後,獲得的結果是:
3)在同一個代碼塊中處理多種錯誤類型
這裏咱們舉兩個例子來講明使用try..except...語句來在一個代碼塊中處理多種錯誤類型,代碼以下:
運行後的結果是:
咱們能夠看到程序拋出的是IndexError錯誤,此時咱們將IndexError錯誤進行解決後,再繼續運行代碼,運行結果是:
咱們用比較簡單易懂的語言來描述 try ... except ... finally 的用法,咱們能夠這麼說:
try:下面放你須要監控的代碼
except:處理捕捉到的錯誤異常
finally:無論try下面的代碼是否遇到異常,finally下面的代碼必定會執行
咱們舉一個比較經常使用的例子來講明 try ... except ... finally 的具體用法:
這個就是打開一個文件,讀取文件,若是文件損壞等致使沒法正常打開、讀取時,會拋出異常,可是不管是否打開成功、讀取成功最後都會關閉文件,這也是 try ... except ... finally 最經常使用的場景。
raise的做用就是主動把異常處理中的錯誤拋出來,讓咱們看到 traceback 信息,通常都是在咱們處理完異常信息後,再將錯誤拋出,在後期的單元測試中生成測試報告用的比較多。
示範代碼以下:
運行後的結果以下所示:
運行後咱們能夠發現,雖然已經處理了錯誤,可是仍是跑出了traceback信息。
有這麼一種場景,在咱們的程序運行過程當中,若是發生了比較嚴重的錯誤,除了寫入日誌以外,咱們還須要當即通知項目負責人進行處理,而當程序遇到通常的錯誤時,則只須要寫入日誌就能夠了。而這些比較嚴重的錯誤可能不止一種,此時咱們就須要將異常進行分組,將須要進行統一處理的異常寫在一塊兒,方便更好的管理。
示範代碼以下:
運行後的結果是:
懷揣但願去努力,靜待美好的出現。