1. 程式人生 > 其它 >Python 語言-第二章流程控制結構加餐之異常處理

Python 語言-第二章流程控制結構加餐之異常處理

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 程式碼塊 向下執行

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 語句塊無論是否發生異常都會被執行
  • 能常用來釋放 try 語句塊中申請的資源

  • 例如:

2.4.2.5 traceback模組

  • 異常資訊:報錯時,Charm 下面的紅色部分就是異常資訊
  • traceback 模組的作用:列印異常資訊
    • 因為有時候時需要我們將異常資訊寫入日誌檔案,所以需要用到這個模組

2.4.3 python 常見的異常型別

  • 異常型別 描述
    Zero Division Error 在除法(取模運算)中以 0 作為除數
    IndexError 序列中沒有此索引
    KeyError 對映中沒有這個鍵
    NameError 未宣告/初始化物件(沒有物件)
    SyntaxError Python語法錯誤
    ValueError 傳入無效引數
    TypeError 對型別操作無效操作
    ImportError 匯入模組/物件失敗