python程式的除錯方法

2021-07-10 03:13:22 字數 3368 閱讀 2364

【**:

本文討論在沒有方便的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 輸入想要執行的方法 因為程式的除錯非常重要,程式猿可以利用好的除錯方法去查詢定位自己的問題所在之處。從而,達到糾正自己程式錯誤的地方,健壯自己的程式,讓問題變得越來越少,程式變得越來越健康。故作此文,而且日後會將實用的除錯程式方法不斷進行迭代更新。...