【**:
本文討論在沒有方便的ide工具可用的情況下,使用pdb除錯python程式
原始碼例子
例如,有模擬稅收計算的程式:
#!/usr/bin/python
def debug_demo(val):
if val <= 1600 :
print "level 1"
print 0
elif val <= 3500 :
print "level 2"
print (val - 1600) * 0.05
elif val <= 6500 :
print "level 3"
print (val - 3500) * 0.10 + (3500-1600) * 0.05
else:
print "level 4"
print (val - 6500) * 0.20 + (6500-3500) * 0.10 + (3500-1600) * 0.05
#~def debug_demo
if __name__ == "__main__":
debug_demo(4500)
debug_demo函式計算4500的入賬所需的稅收。
如何除錯?
1.加入斷點
在需要插入斷點的地方,加入紅色部分**:如果_debug值為true,則在該處開始除錯(加入_debug的原因是為了方便開啟/關閉除錯)。
#!/usr/bin/python
_debug=true
def debug_demo(val):
if _debug == true:
import pdb
pdb.set_trace()
if val <= 1600 :
print "level 1"
print 0
elif val <= 3500 :
print "level 2"
print (val - 1600) * 0.05
elif val <= 6500 :
print "level 3"
print (val - 3500) * 0.10 + (3500-1600) * 0.05
else:
print "level 4"
print (val - 6500) * 0.20 + (6500-3500) * 0.10 + (3500-1600) * 0.05
#~def debug_demo
if __name__ == "__main__":
debug_demo(4500)
2.開始執行除錯
執行程式./debug_demo.py,得到
> /usr/local/qspace/user_network/debug_demo.py(7)debug_demo()
-> if val <= 1600 :
(pdb)
-> val <= 1600 : 指示當前執行的語句,(pdb)等待你的除錯指令. pdb的指令很豐富,輸入h指令可以檢視指令的使用方法。下面簡單介紹常用指令:
檢視**上下文,l(小寫l)
(pdb) l
2 _debug=true
3 def debug_demo(val):
4 if _debug == true:
5 import pdb
6 pdb.set_trace()
7 ->
if val <= 1600 :
8 print "level 1"
9 print 0
10 elif val <= 3500 :
11 print "level 2"
12 print (val - 1600) * 0.05
(pdb)
左邊是行號,右邊是**正文。
監視變數:p 變數名
(pdb) p val
4500
(pdb)
單步執行: n
-> elif val <= 3500 :
(pdb) l
5 import pdb
6 pdb.set_trace()
7 if val <= 1600 :
8 print "level 1"
9 print 0
10 ->
elif val <= 3500 :
11 print "level 2"
12 print (val - 1600) * 0.05
13 elif val <= 6500 :
14 print "level 3"
15 print (val - 3500) * 0.10 + (3500-1600) * 0.05
加入斷點:b 行號
(pdb) b 14
執行到斷點: c
(pdb) c
> /*****
-> print "level 3"
(pdb) l
9 print 0
10 elif val <= 3500 :
11 print "level 2"
12 print (val - 1600) * 0.05
13 elif val <= 6500 :
14 b->
print "level 3"
15 print (val - 3500) * 0.10 + (3500-1600) * 0.05
16 else:
17 print "level 4"
18 print (val - 6500) * 0.20 + (6500-3500) * 0.10 + (3500-1600) * 0.05
19
執行到函式返回前: r
(pdb) r
level 3
195.0
--return--
> /****()
->none
-> print (val - 3500) * 0.10 + (3500-1600) * 0.05
(pdb)
說明:
pdb還有很多其他很多有用的指令,讀者可以自行探索。輸入h,h 命令。就可以得到命令的詳細幫助。
不過,我個人認為一般無需啟動這種除錯方法,一般使用日誌輸出進行除錯即可,除非遇到了非常微妙的錯誤。這時,單步除錯的威力便顯示出來了
python程式除錯方法總結
1.使用assert print eg err.py def foo s n int s assert n 0,n is zero return 10 n def main foo 0 執行方式 python err.py 如執行時使用 0 引數 python 0 err.py,則關閉assert,...
python程式的除錯
python程式在執行時內部是什麼樣子的呢?這個問題挺深入的,在這學習一下python程式是怎樣除錯的。示例程式1 直接執行這個程式,會發現提示以下錯誤 錯誤發生在functionb中,為了檢視情況,在這裡下乙個斷點 再次執行直接進入pdb介面,並停在斷點處 pdb的介面和python很類似,可以通...
VUE程式除錯的方法
目錄4.alert 除錯法 5 斷點除錯法 5.4 輸入想要執行的方法 因為程式的除錯非常重要,程式猿可以利用好的除錯方法去查詢定位自己的問題所在之處。從而,達到糾正自己程式錯誤的地方,健壯自己的程式,讓問題變得越來越少,程式變得越來越健康。故作此文,而且日後會將實用的除錯程式方法不斷進行迭代更新。...