CodeGym /課程 /Python SELF TW /程式運行期間的錯誤

程式運行期間的錯誤

Python SELF TW
等級 17 , 課堂 0
開放

1.1 錯誤的出現

錯誤(和異常)是程式設計的一部分。 當程式碰到無法處理的意外狀況時就會出現錯誤。在 Python 中,有一個異常處理系統, 能夠捕捉和處理錯誤,避免程式結束運行。

異常通常在以下情況下出現:

語法錯誤:

這些錯誤是在代碼編譯時發現的,與 Python 的語法錯誤有關。例如,漏掉的冒號或錯誤的關鍵字。


if True:
    print("Hello")
        

運行時錯誤 (Runtime Errors)

這些錯誤在程式運行時出現,可能由多種原因引起,例如除以零、訪問不存在的列表索引、不正確地使用資料型別等。


print(1 / 0)  # ZeroDivisionError
        

邏輯錯誤:

當程式運行沒有問題但輸出錯誤的結果時,就會出現邏輯錯誤。 由於程式邏輯錯誤,這些錯誤不會引發異常,且較難調試。

邏輯錯誤通常被稱為bug—這就像是程式功能的某種不足。運行時的錯誤被稱為異常。對於每個這樣的錯誤,Python 會創建一個特殊的對象(異常)並「拋出」它...

1.2 異常的路徑

當 Python 中發生異常時,它會沿著調用堆疊上升,直到被處理。調用堆疊是引發異常的函式調用順序。

異常上升機制

  • 異常出現:當發生錯誤時,Python 會創建異常對象。
  • 尋找異常處理器:Python 解釋器開始在當前代碼塊中尋找異常處理器。如果找不到處理器,它會轉到調用當前函式的下一個代碼塊。
  • 沿著堆疊上升:此過程重複,直到找到處理器或堆疊用盡。
  • 程式結束:如果找不到處理器,程式將結束並顯示錯誤信息。

例子:


def func_a():
    func_b()
        
def func_b():
    func_c()
        
def func_c():
    print(1 / 0)  # 這裡引發異常 ZeroDivisionError
        
func_a()
        

在這個例子中,異常 ZeroDivisionError 發生在函數 func_c 中,然後沿著調用堆疊上升經過 func_bfunc_a。 如果沒有找到處理器,程式將以錯誤結束。

1.3 讀取日誌

當程式由於未處理的異常而結束時,Python 會輸出堆疊回溯(traceback),這能幫助開發者了解發生了什麼。堆疊回溯包含有關函數調用順序的信息,這些信息導致了異常的出現,可以用來調試程式。

堆疊回溯的例子


Traceback (most recent call last):
    File "example.py", line 10, in 
      
  
      
  
      
  
    func_a() File "example.py", line 2, in func_a func_b() File "example.py", line 5, in func_b func_c() File "example.py", line 8, in func_c print(1 / 0) ZeroDivisionError: division by zero 
  

堆疊回溯分析

  • 異常類型和信息:在回溯的最後,顯示異常的類型和信息。在給出的例子中,是 ZeroDivisionError: division by zero
  • 調用順序:堆疊回溯顯示了函數的調用順序。在我們的例子中,錯誤出現在函數 func_cprint(1 / 0) 行中,該函數由 func_b 調用,而 func_b 又由 func_a 調用。
  • 文件和代碼行:在回溯的每一行中,都指出了發生調用的文件和行號。這有助於快速找到並修正代碼中的錯誤。

堆疊回溯的實際應用

堆疊回溯是進行程式調試和分析的重要工具。它能幫助開發者了解錯誤發生的原因,並找到發生錯誤的代碼位置。以下是使用堆疊回溯的幾個建議:

  1. 從下往上閱讀:從回溯中最下面的調用開始分析,因為這是異常發生的地方。
  2. 檢查所有調用:查看回溯中的所有調用,以了解異常傳遞的路徑。
  3. 修正代碼:使用回溯的信息來修正代碼,並防止未來出現類似的錯誤。

更多有關異常的內容將在接下來的講座中介紹。

2
任務
Python SELF TW, 等級 17, 課堂 0
上鎖
零除。
零除。
2
任務
Python SELF TW, 等級 17, 課堂 0
上鎖
類型錯誤。
類型錯誤。
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION