程式一次寫對機率極低,除錯是開發者日常。本文整理五種主流除錯手法,從原始 print 到專業 IDE,分析優缺點與適用場景,附實戰程式碼片段。
def foo(s):
n = int(s)
print('>>> n = %d' % n)
return 10 / n
def foo(s):
n = int(s)
assert n != 0, 'n is zero!'
return 10 / n
python -O 啟動時自動忽略所有 assert(視同 pass)。assert 同樣影響可讀性。import logging
logging.basicConfig(level=logging.INFO)
s = '0'
n = int(s)
logging.info('n = %d', n)
print(10 / n)
DEBUG < INFO < WARNING < ERROR < CRITICAL,單一設定全域控制。WARNING 以上,開發環境 DEBUG。$ python -m pdb err.py
import pdb; pdb.set_trace() # 或 breakpoint()
| 指令 | 功能 |
|---|---|
| n (next) | 單步執行(不進入函式) |
| s (step) | 單步進入函式 |
| c (continue) | 繼續執行至下一斷點 |
| p 變數 | 印出變數值 |
| l (list) | 顯示原始碼上下文 |
| q (quit) | 離開除錯器 |
print / logging.debugassertlogging 統一管理pdb.set_trace()「Logging 才是終極武器」——善用結構化日誌,事後追查比即時除錯更有效率。