來自:開源最前線(ID:OpenSourceTop)
連結:https://github.com/cool-RR/PySnooper
一般情況下,在編寫 Python 程式碼時,如果想弄清楚為什麼 Python 程式碼沒有按照預期執行的原因,比如你想知道哪些是正在執行,哪些沒有執行,以及區域性變數的值是什麼…通常我們會使用包含斷點和觀察樣式等功能成熟的除錯器,或者直接使用 print 陳述句打印出來。
今天,猿妹和大家分享一個“貧民版”除錯工具——PySnooper
PySnooper允許你執行以上相同的操作,只需為要除錯的函式新增一個裝飾器即可,而不需要構建正確的 print 列印。你還將得到函式的詳細日誌,包括運行了哪些程式碼行、何時執行以及何時更改了區域性變數。
PySnooper 使用起來十分簡單,開發者可以在任何龐大的程式碼庫中使用它,而無需進行任何設定。你只需新增裝飾器,併為日誌輸出地址指定路徑,方法是將其路徑指定為第一個引數。
目前,PySnooper在GitHub上已經獲得 7047 個Star,371 個Fork(GitHub地址:https://github.com/cool-RR/PySnooper)
示例
以下編寫了一個函式,透過傳回一個二進位制串列。我們只需要透過新增@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
15:29:11.327032 call 4 def number_to_bits(number):
15:29:11.327032 line 5 if number:
15:29:11.327032 line 6 bits = []
New var:....... bits = []
15:29:11.327032 line 7 while number:
15:29:11.327032 line 8 number, remainder = divmod(number, 2)
New var:....... remainder = 0
Modified var:.. number = 3
15:29:11.327032 line 9 bits.insert(0, remainder)
Modified var:.. bits = [0]
15:29:11.327032 line 7 while number:
15:29:11.327032 line 8 number, remainder = divmod(number, 2)
Modified var:.. number = 1
Modified var:.. remainder = 1
15:29:11.327032 line 9 bits.insert(0, remainder)
Modified var:.. bits = [1, 0]
15:29:11.327032 line 7 while number:
15:29:11.327032 line 8 number, remainder = divmod(number, 2)
Modified var:.. number = 0
15:29:11.327032 line 9 bits.insert(0, remainder)
Modified var:.. bits = [1, 1, 0]
15:29:11.327032 line 7 while number:
15:29:11.327032 line 10 return bits
15:29:11.327032 return 10 return bits
Return value:.. [1, 1, 0]
特性
stderr,則可以將選擇輸出到指定檔案:
@pysnooper.snoop('/my/log/file.log')
檢視一些非區域性變數的變數值:
@pysnooper.snoop(variables=('foo.bar', 'self.whatever'))
顯示函式呼叫的函式的snoop行:
@pysnooper.snoop(depth=2)
朋友會在“發現-看一看”看到你“在看”的內容