1. 程式人生 > 其它 >一個牛逼的 Python 除錯工具

一個牛逼的 Python 除錯工具

一般情況下,在編寫 Python 程式碼時,如果想弄清楚為什麼 Python 程式碼沒有按照預期執行的原因,比如你想知道哪些是正在執行,哪些沒有執行,以及區域性變數的值是什麼...通常我們會使用包含斷點和觀察模式等功能成熟的偵錯程式,或者直接使用 print 語句打印出來。

今天和大家分享一個“貧民版”除錯工具——PySnooper

PySnooper允許你執行以上相同的操作,只需為要除錯的函式新增一個裝飾器即可,而不需要構建正確的 print 列印。你還將得到函式的詳細日誌,包括運行了哪些程式碼行、何時執行以及何時更改了區域性變數。

PySnooper 使用起來十分簡單,開發者可以在任何龐大的程式碼庫中使用它,而無需進行任何設定。你只需新增裝飾器,併為日誌輸出地址指定路徑,方法是將其路徑指定為第一個引數。

alt

目前,PySnooper在GitHub上已經獲得7047個Star,371個Fork(GitHub地址:https://github.com/cool-RR/PySnooper)

示例

以下編寫了一個函式,通過返回一個二進位制列表。我們只需要通過新增@pysnooper.snoop()裝飾器就可以了:

importpysnooper

@pysnooper.snoop()
defnumber_to_bits(number):
ifnumber:
bits=[]
whilenumber:
number,remainder=divmod(number,2)
bits.insert(0,remainder)
return
bits
else:
return[0]

number_to_bits(6)

輸出如下:

Startingvar:..number=6
15:29:11.327032call4defnumber_to_bits(number):
15:29:11.327032line5ifnumber:
15:29:11.327032line6bits=[]
Newvar:.......bits=[]
15:29:11.327032line7whilenumber:
15:29:11.327032line8number,remainder=divmod(number,2)
Newvar:.......remainder=0
Modifiedvar:..number=3
15:29:11.327032line9bits.insert(0,remainder)
Modifiedvar:..bits=[0]
15:29:11.327032line7whilenumber:
15:29:11.327032line8number,remainder=divmod(number,2)
Modifiedvar:..number=1
Modifiedvar:..remainder=1
15:29:11.327032line9bits.insert(0,remainder)
Modifiedvar:..bits=[1,0]
15:29:11.327032line7whilenumber:
15:29:11.327032line8number,remainder=divmod(number,2)
Modifiedvar:..number=0
15:29:11.327032line9bits.insert(0,remainder)
Modifiedvar:..bits=[1,1,0]
15:29:11.327032line7whilenumber:
15:29:11.327032line10returnbits
15:29:11.327032return10returnbits
Returnvalue:..[1,1,0]

特性

stderr,則可以將選擇輸出到指定檔案:

@pysnooper.snoop(/my/log/file.log)

檢視一些非區域性變數的變數值:

@pysnooper.snoop(variables=(foo.bar,self.whatever))

顯示函式呼叫的函式的snoop行:

@pysnooper.snoop(depth=2)
[點這裡:2020Python高薪實戰學習大合集](https://ke.magedu.com/detail/i_5ef85d786e5f7_iHDka6sJ/1)**

[拿走不謝!Python 3.9 官方中文文件,限時領!] (http://dwz.date/dE6v)

[限時!速領!14張高清Python速查表,效率提升必備!] (http://dwz.date/dE6w)

[GitHub標星3W+,80個Python案例,帶你輕鬆玩轉Python學習!] (http://dwz.date/dE64)