DeBug Python 代碼的方式有很多種?比如:
(1)設置斷點
(2)print函數
(3)。。。
本文要介紹的是一個新開源的項目PySnooper ,只要給有疑問的代碼加上裝飾器,各種信息一目了然,找出錯誤也就非常簡單。

項目地址:https://github.com/cool-RR/pysnooper
極簡DeBug工具PySnooper
一般情況下,想要知道哪一行代碼在運行、哪一行不運行、本地變量的值是多少時,大部分人會使用 print 函數,在關鍵部分打印某個或某組變量的值、形狀、類型等信息。
而 PySnooper 讓你能快速地獲得這些信息,且相比之下它不需要細致地寫 print 函數,只需要向感興趣的函數增加一個裝飾器就行了。我們會得到該函數的詳細 log,包含哪行代碼能運行、什么時候運行以及本地變量變化的確切時間。
相比於其他代碼智能工具,PySnooper 為何如此優秀?因為不需要任何設置,你就可以在劣等、不規則的企業代碼庫上使用 PySnooper。只需要加個裝飾器,並為日志輸出地址指定路徑就行了。【注:無論項目中還是面試都離不開裝飾器話題,裝飾器的強大在於它能夠在不修改原有業務邏輯的情況下對代碼進行擴展,權限校驗、用戶認證、日志記錄、性能測試、事務處理、緩存等都是裝飾器的絕佳應用場景,它能夠最大程度地對代碼進行復用】
廢話不多說,上案例代碼:
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]
@pysnooper.snoop('F:/GitRepository/Python/PySnooper-Test/logs/file.log', prefix='ZZZ || ')
def number_to_bits2(number):
if number:
bits = []
while number:
number, remainder = divmod(number, 2)
bits.insert(0, remainder)
return bits
else:
return [0]
number_to_bits(6)
number_to_bits2(8)
該函數返回的日志如下,我們可以看到在調用 number_to_bits 函數時,賦予參數 number 的初始值為 6, 接着,PySnooper 就對着源代碼一行行分析了。

使用PySnooper的正確姿勢
首先使用 pip 安裝包:
pip install pysnooper

然后,在使用時,import這個pysnooper就好。通過查看snoop函數的定義,很容易得出以下的使用心得:
1.如果標准錯誤輸出難以獲得,或者太長了,那么可以將輸出定位到本地文件:
@pysnooper.snoop('/my/log/file.log')
2.查看一些非本地變量的值:
@pysnooper.snoop(variables=('foo.bar', 'self.whatever'))
3.展示我們函數中調用函數的 snoop 行:
@pysnooper.snoop(depth=2)
4.將所有 snoop 行以某個前綴開始,更容易定位和找到:
@pysnooper.snoop(prefix='ZZZ ')
