国产探花免费观看_亚洲丰满少妇自慰呻吟_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單步調試效率要高很多,但也高不到哪去。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 阳城县| 神池县| 福贡县| 友谊县| 利津县| 留坝县| 双峰县| 竹溪县| 上杭县| 桃江县| 读书| 永靖县| 三原县| 罗甸县| 诸城市| 岱山县| 永定县| 湖南省| 东丰县| 谢通门县| 西林县| 濮阳市| 和静县| 舒兰市| 寿光市| 巴青县| 通渭县| 台北县| 马公市| 江源县| 庄浪县| 黄龙县| 莱阳市| 清涧县| 盐城市| 双流县| 皋兰县| 油尖旺区| 琼海市| 澎湖县| 台中县|