国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Python學習Day12調試斷言loggingpdbpdb.set_trace

2019-11-14 17:13:44
字體:
來源:轉載
供稿:網友

調試

第一種方法簡單直接粗暴有效,就是用PRint把可能有問題的變量打印出來看看:

>>> def foo(s):n= int(s)print '>>> n = %d' % nreturn 10 / n>>> def main():foo('0')>>> main()>>> n = 0Traceback (most recent call last):File "<pyshell#25>", line 1, in <module>main()File "<pyshell#24>", line 2, in mainfoo('0')File "<pyshell#22>", line 4, in fooreturn 10 / nZeroDivisionError: integer division ormodulo by zero

  

斷言

凡是用print來輔助查看的地方,都可以用斷言(assert)來替代:

>>> def foo(s):n=int(s)assertn!=0,'n is zero'return10/n>>> def main():foo('0')>>> main()Traceback (most recent call last):File "<pyshell#37>", line 1, in <module>main()File "<pyshell#36>", line 2, in mainfoo('0')File "<pyshell#32>", line 3, in fooassert n!=0,'n is zero'AssertionError: n is zero

  

logging

把print替換為logging是第3種方式,和assert比,logging不會拋出錯誤,而且可以輸出到文件:

>>> import logging>>>logging.basicConfig(level=logging.INFO)>>> s='0'>>> n=int(s)>>> logging.info('n=%d' % n)>>> print 10/n Traceback (most recent call last):File "<pyshell#48>", line 1, in <module>print 10/nZeroDivisionError: integer division ormodulo by zero

  

pdb

第4種方式是啟動Python的調試器pdb,讓程序以單步方式運行,可以隨時查看運行狀態。

# err.pys = '0'n = int(s)print 10 / n$ python -m pdb err.py> /Users/michael/Github/sicp/err.py(2)<module>()-> s = '0'

  

以參數-m pdb啟動后,pdb定位到下一步要執行的代碼-> s = '0'。輸入命令l來查看代碼:

 

(Pdb) l

1 # err.py

2 -> s = '0'

3 n = int(s)

4 print 10 / n

[EOF]

輸入命令n可以單步執行代碼:

 

(Pdb) n

>/Users/michael/Github/sicp/err.py(3)<module>()

-> n = int(s)

(Pdb) n

>/Users/michael/Github/sicp/err.py(4)<module>()

-> print 10 / n

任何時候都可以輸入命令p 變量名來查看變量:

 

(Pdb) p s

'0'

(Pdb) p n

0

輸入命令q結束調試,退出程序:

 

(Pdb) n

ZeroDivisionError: 'integer division ormodulo by zero'

>/Users/michael/Github/sicp/err.py(4)<module>()

-> print 10 / n

(Pdb) q

Try

這種通過pdb在命令行調試的方法理論上是萬能的,但實在是太麻煩

pdb.set_trace()

這個方法也是用pdb,但是不需要單步執行,我們只需要import pdb,然后,在可能出錯的地方放一個pdb.set_trace(),就可以設置一個斷點:

# err.py
import pdb
s = '0'
n = int(s)
pdb.set_trace() # 運行到這里會自動暫停
print10 / n

運行代碼,程序會自動在pdb.set_trace()暫停并進入pdb調試環境,可以用命令p查看變量,或者用命令c繼續運行:

$ python err.py

>/Users/michael/Github/sicp/err.py(7)<module>()

-> print 10 / n

(Pdb) p n

0

(Pdb) c

Traceback (most recent call last):

File "err.py", line 7, in <module>

print 10 / n

ZeroDivisionError: integer division ormodulo by zero

這個方式比直接啟動pdb單步調試效率要高很多,但也高不到哪去。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 吉木萨尔县| 尤溪县| 攀枝花市| 昔阳县| 泾川县| 思南县| 五指山市| 迁西县| 阜平县| 东阿县| 通山县| 德江县| 贵南县| 揭东县| 南通市| 德令哈市| 天等县| 绍兴市| 尼玛县| 灌南县| 河南省| 萨迦县| 南木林县| 常宁市| 玉林市| 临潭县| 图木舒克市| 北票市| 密山市| 义乌市| 宣城市| 大渡口区| 岐山县| 睢宁县| 班戈县| 曲麻莱县| 武强县| 乌兰察布市| 玛多县| 武胜县| 麟游县|