Python 語言-第二章流程控制結構加餐之異常處理
阿新 • • 發佈:2022-01-17
2.4 異常處理
2.4.1 Bug 的常見型別
- 粗心導致的錯誤,如:
SyntaxError
:Python 語法錯誤- 漏了末尾的冒號,如 if 語句、迴圈語句、else 子句等等
- 縮排錯誤
- 把英文符號寫成了中文符號,比如冒號、引號、括號
- 字元拼接時,把字串和數字進行了拼接
- 沒有定義變數,比如 while 迴圈條件的變數
- "=="比較運算子與"="賦值運算子混用
- 知識不熟練導致的錯誤,如:
IndexError
:索引越界錯誤- 使用 append() 方法時
- 思路不清晰導致的錯誤,如:
- for 迴圈進行巢狀
- 解決方法:
- 多使用 print() 函式
- 使用註釋理清思路
- 被動掉坑:程式邏輯沒有問題,因為使用者操作或者一些”例外情況“導致程式出現問題,如:
- 輸入的被除數為 0
- 解決方法:
- 使用 python 的異常處理機制,在出現異常時捕獲異常,”內部消化“,讓程式繼續執行
2.4.2 python 的異常處理機制
2.4.2.1 try - except
語句
- 作用: 捕獲程式在執行時遇到的異常情況,即一些報錯。
- 意義: 因為程式在發現某個錯誤時,往往會中斷不再向下執行。
- 程式碼的執行過程:
- 先執行 try 程式碼塊, 發現了錯誤。就執行 except 程式碼塊 向下執行
- 先執行 try 程式碼塊, 發現了錯誤。就執行 except 程式碼塊 向下執行
2.4.2.2 多個 except
結構
- 程式碼的執行過程:
- 如果執行到 except 程式碼塊會按照先子類後父類的順序
- 為了避免遺漏可能出現的異常,可以在最後增加 BaseException
- 例如:
2.4.2.3 try-except-else
結構
- 程式碼執行過程:
- 如果 try 語句塊中沒有丟擲異常,則執行 else 語句塊,如果 try 語句塊丟擲異常,則執行 except 語句塊
- 例如:
2.4.2.4 try-except-else-finally
結構
-
程式碼執行過程:
- finally 語句塊無論是否發生異常都會被執行
- finally 語句塊無論是否發生異常都會被執行
-
能常用來釋放 try 語句塊中申請的資源
-
例如:
2.4.2.5 traceback
模組
- 異常資訊:報錯時,Charm 下面的紅色部分就是異常資訊
- traceback 模組的作用:列印異常資訊
- 因為有時候時需要我們將異常資訊寫入日誌檔案,所以需要用到這個模組
2.4.3 python 常見的異常型別
-
異常型別 描述 Zero Division Error 在除法(取模運算)中以 0 作為除數 IndexError 序列中沒有此索引 KeyError 對映中沒有這個鍵 NameError 未宣告/初始化物件(沒有物件) SyntaxError Python語法錯誤 ValueError 傳入無效引數 TypeError 對型別操作無效操作 ImportError 匯入模組/物件失敗