歡迎光臨
每天分享高質量文章

我猜你需要這個Python除錯工具

來自:開源最前線(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             numberremainder = divmod(number2)
New var:....... remainder = 0
Modified var:.. number = 3
15:29:11.327032 line         9             bits.insert(0remainder)
Modified var:.. bits = [0]
15:29:11.327032 line         7         while number:
15:29:11.327032 line         8             numberremainder = divmod(number2)
Modified var:.. number = 1
Modified var:.. remainder = 1
15:29:11.327032 line         9             bits.insert(0remainder)
Modified var:.. bits = [10]
15:29:11.327032 line         7         while number:
15:29:11.327032 line         8             numberremainder = divmod(number2)
Modified var:.. number = 0
15:29:11.327032 line         9             bits.insert(0remainder)
Modified var:.. bits = [110]
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:.. [110]

 

 

特性

 

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

 

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

 

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

 

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

 

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

 

@pysnooper.snoop(depth=2)

    已同步到看一看
    贊(0)

    分享創造快樂