【Python】pysnooper模塊對代碼進行調試

一般情況下,在編寫Python代碼時,如果想弄清楚爲什麼Python代碼沒有按照預期執行的原因,比如你想知道哪些是正在運行,哪些沒有運行,以及局部變量的值是什麼...
通常我們會使用包含斷點和觀察模式等功能成熟的調試器,或者直接使用 print 語句打印出來。今天和大家分享一個“貧民版”調試工具——PySnooper
PySnooper允許你執行以上相同的操作,只需爲要調試的函數添加一個裝飾器即可,而不需要構建正確的print打印。你還將得到函數的詳細日誌,包括運行了哪些代碼行、何時運行以及何時更改了局部變量。
PySnooper 使用起來十分簡單,開發者可以在任何龐大的代碼庫中使用它,而無需進行任何設置。你只需添加裝飾器,併爲日誌輸出地址指定路徑,方法是將其路徑指定爲第一個參數。
目前,PySnooper在GitHub上已經獲得7047個Star,371個Fork(GitHub地址:https://github.com/cool-RR/PySnooper)

參照具體案例:

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
#作者:cacho_37967865
#博客:https://blog.csdn.net/sinat_37967865
#文件:PySnooperModel.py
#日期:2019-06-01
#備註:pip install pysnooper  “貧民版”調試工具——PySnooper  
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

import pysnooper
import random


#@pysnooper.snoop()                       # 只要添加一個裝飾器
#@pysnooper.snoop(depth=2)                # 顯示函數調用的函數的snoop行:
@pysnooper.snoop(prefix='ZZZ--> ')        # 運行日誌前面顯示ZZZ--> ,突出顯示這個是運行日誌
def number_to_bits(number):
    if number:
        bits = []
        while number:
            number, remainder = divmod(number, 2)
            bits.insert(0, remainder)
        return bits
    else:
        return [0]


# 跟蹤核心代碼+變量的運行(with )
def foo():
    lst = []
    for i in range(10):
        lst.append(random.randrange(1, 1000))

    with pysnooper.snoop():
        lower = min(lst)
        upper = max(lst)
        mid = (lower + upper) / 2
        print(lower, mid, upper)


# 將函數運行的詳細日誌存儲到日誌
@pysnooper.snoop('./log/file.log')
def output():
    lst = []
    for i in range(10):
        lst.append(random.randrange(1, 1000))

if __name__ == "__main__":
    number_to_bits(6)
    foo()
    output()

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章