PySnooperPython 自動(dòng) Debug 工具
PySnooper 在 GitHub 上自嘲是一個(gè)“乞丐版”調(diào)試工具(poor man's debugger)。
一般情況下,在編寫 Python 代碼時(shí),如果想弄清楚為什么 Python 代碼沒有按照預(yù)期執(zhí)行、哪些代碼在運(yùn)行哪些沒在運(yùn)行、局部變量又是什么,我們會(huì)使用包含斷點(diǎn)和觀察模式等功能的調(diào)試器,或者直接使用 print 語(yǔ)句打印出來。
但上面的方法都比較麻煩,例如使用調(diào)試器需要進(jìn)行繁瑣的設(shè)置,使用 print 打印也要很仔細(xì)。與它們相比,使用 PySnooper 只需為要調(diào)試的函數(shù)添加一個(gè)裝飾器即可,這樣就能獲得運(yùn)行函數(shù)詳細(xì)的 log,包括執(zhí)行的代碼行和執(zhí)行時(shí)間,以及局部變量發(fā)生變化的確切時(shí)間。
之所以稱為“乞丐版”,相信是因?yàn)?PySnooper 使用起來十分簡(jiǎn)單,開發(fā)者可以在任何龐大的代碼庫(kù)中使用它,而無(wú)需進(jìn)行任何設(shè)置。只需添加裝飾器,并為日志輸出地址指定路徑。
示例
下面的代碼寫了一個(gè)函數(shù)將傳入的值轉(zhuǎn)換為二進(jìn)制碼,并返回一個(gè)二進(jìn)制列表。要使用 PySnooper,只需為函數(shù)添加 @pysnooper.snoop()裝飾器即可:
import pysnooper
@pysnooper.snoop()
def number_to_bits(number):
if number:
bits = []
while number:
number, remainder = divmod(number, 2)
bits.insert(0, remainder)
return bits
else:
return [0]
number_to_bits(6)
輸出如下
Starting var:.. number = 6
21:14:32.099769 call 3 @pysnooper.snoop()
21:14:32.099769 line 5 if number:
21:14:32.099769 line 6 bits = []
New var:....... bits = []
21:14:32.099769 line 7 while number:
21:14:32.099769 line 8 number, remainder = divmod(number, 2)
New var:....... remainder = 0
Modified var:.. number = 3
21:14:32.099769 line 9 bits.insert(0, remainder)
Modified var:.. bits = [0]
21:14:32.099769 line 7 while number:
21:14:32.099769 line 8 number, remainder = divmod(number, 2)
Modified var:.. number = 1
Modified var:.. remainder = 1
21:14:32.099769 line 9 bits.insert(0, remainder)
Modified var:.. bits = [1, 0]
21:14:32.099769 line 7 while number:
21:14:32.099769 line 8 number, remainder = divmod(number, 2)
Modified var:.. number = 0
21:14:32.099769 line 9 bits.insert(0, remainder)
Modified var:.. bits = [1, 1, 0]
21:14:32.099769 line 7 while number:
21:14:32.099769 line 10 return bits
21:14:32.099769 return 10 return bits
安裝
使用 pip 進(jìn)行安裝
pip install pysnooper評(píng)論
圖片
表情
