1. 什麼是除錯?
除錯是指在程式中發現並修正錯誤(bug)的過程。不僅限於 Python,任何程式語言的開發中除錯都是不可或缺的一環。良好的除錯技巧能提升程式的品質與可靠性,並成為高效開發的基礎。
除錯的目的
除錯的主要目的是找出並修正潛藏在程式碼中的問題。最終目標是讓程式能正確且高效地執行。
Python 常見的錯誤類型
讓我們來看看 Python 中常見的錯誤類型,以及其成因與解決方式。
- SyntaxError:語法錯誤。例如符號錯誤、漏寫冒號等語法不正確時會發生。
- TypeError:類型錯誤。例如嘗試將整數與字串相加等,資料類型不一致的運算會導致此錯誤。
- NameError:使用了未定義的變數或函式時會出現。也可能因拼字錯誤而引發。
- IndexError:當試圖存取超出串列或元組範圍的索引時會發生。
- ValueError:當函式或方法接收到不適合的值時會產生此錯誤。
了解這些錯誤類型,並能正確應對,是開始學習除錯的重要一步。

2. 在 Python 中的除錯方法
Python 提供多種除錯方式。以下將介紹幾種常見的技巧。
使用 print 進行除錯
最基本且方便的方式是使用 print
指令。可以輸出變數的值或程式執行的進度到終端機中進行確認。
使用範例
def add_numbers(a, b):
result = a + b
print(f"Debug: result = {result}") # 除錯用的 print 指令
return result
add_numbers(2, 3)
優點與限制
- 優點:不需特別設定,隨時都能使用。
- 限制:大量使用
print
可能讓程式碼變得難以閱讀,不適合處理複雜的錯誤。
善用 pdb 模組
使用 Python 內建的除錯工具 pdb
可以暫停程式並深入觀察執行流程。
基本使用方式
- 設定中斷點:在想要除錯的地方加入
pdb.set_trace()
。 - 執行程式:當程式執行到中斷點時會暫停。
- 輸入指令:透過下方指令操作除錯流程。
常用指令
n
:執行下一行(step over)s
:進入函式內部(step in)c
:繼續執行直到下一個中斷點或程式結束p <變數名>
:顯示變數的值
import pdb
def calculate_total(a, b):
pdb.set_trace() # 在這裡暫停
result = a + b
return result
calculate_total(5, 3)
利用 IDE 進行除錯
支援 Python 的整合開發環境(IDE)提供了更進階的除錯功能。特別是 Visual Studio Code 和 PyCharm,是深受開發者歡迎的選擇。
Visual Studio Code 的除錯功能
- 設定中斷點:點選要除錯的程式碼行即可設定中斷點。
- 開始除錯:點選「Run」→「啟動除錯」。
- 查看變數:可在程式執行期間查看變數的值。
PyCharm 的除錯功能
- 設定中斷點:在目標行設置中斷點。
- 以除錯模式執行:點選右上角的「除錯」按鈕。
- 即時監控:可即時查看變數的值與物件狀態。
3. 有效除錯的小技巧
這裡介紹一些能提升除錯效率的技巧與方法。
如何閱讀與活用錯誤訊息
Python 的錯誤訊息會顯示錯誤類型與發生的位置。正確理解錯誤訊息的內容,是快速解決問題的關鍵。
善用 Logging(記錄)
Logging 是比 print
更合適的除錯方法。使用 logging
模組可以記錄程式執行期間發生的事件與錯誤。
import logging
logging.basicConfig(level=logging.DEBUG)
def divide(a, b):
logging.debug(f"Divide function called with a = {a}, b = {b}")
if b == 0:
logging.error("Division by zero!")
return None
return a / b
divide(10, 0)
Logging 不僅適用於開發階段,也非常適合在正式環境中追蹤問題。
導入單元測試(Unit Test)
透過單元測試,可以預防因程式碼修改而產生的錯誤。以下是使用 unittest
模組的範例。
import unittest
def add_numbers(a, b):
return a + b
class TestAddNumbers(unittest.TestCase):
def test_add_positive(self):
self.assertEqual(add_numbers(2, 3), 5)
def test_add_negative(self):
self.assertEqual(add_numbers(-2, -3), -5)
if __name__ == '__main__':
unittest.main()
記錄重現錯誤的步驟
若能穩定重現錯誤,將有助於迅速找出問題原因。重現性越高,越能加快修復速度,也更容易發現其他類似錯誤。

4. 推薦的除錯工具
以下介紹幾個在 Python 中非常實用的除錯工具。
pdb 模組
pdb
是 Python 內建的除錯工具,可透過 set_trace()
設定中斷點進行除錯。
Visual Studio Code
這是一款免費的整合開發環境(IDE),提供豐富的 Python 除錯功能。因支援圖形介面操作,即使是新手也能輕鬆使用。
主要功能
- 設定中斷點
- 即時監控變數
- 逐步執行程式碼
PyCharm
這是一款專為 Python 開發設計的 IDE,擁有強大的除錯功能,特別適合大型專案或團隊開發。
主要功能
- 強大多樣的除錯選項
- 即時變數監控功能
- 可在中斷點執行詳細操作
Logging(logging)模組
logging
模組可記錄詳細的執行紀錄,對於追蹤錯誤特別有幫助。不論是開發階段還是正式運行階段皆可使用。
5. 除錯的最佳實踐
以下是幾項有助於提升除錯效率並改善程式碼品質的最佳實踐方法。
提高程式碼的可讀性
使用具有描述性的變數名稱與函式名稱,可讓程式碼更易讀,也更容易進行除錯。
使用版本控制工具
透過 Git 等版本控制工具管理程式碼歷史,有助於追蹤錯誤發生的原因。
實踐測試驅動開發(TDD)
先撰寫測試再撰寫程式碼的方式,可大幅降低錯誤發生率,並減少後續的除錯時間。
進行程式碼審查
與其他開發者進行程式碼審查,可以發現容易被忽略的錯誤與設計上的改進空間。
使用錯誤追蹤工具
像是 Jira 或 GitHub Issues 等錯誤追蹤工具,可協助系統性管理錯誤、追蹤修正進度並防止重複發生。
6. 結語
Python 的除錯不僅僅是修正錯誤,更能提升整體程式的品質。善用本文介紹的方法與最佳實踐,能有效提升除錯效率。選擇合適的除錯工具與策略,將有助於快速發現並解決錯誤,使開發流程更順暢。
提升你的除錯技能,也就等於提升程式的可靠性,這將是長期專案成功的重要關鍵之一。