詳解Python調試神器之PySnooper
相信很多程序員在調試代碼時,都用過 print。代碼少還好說,如果是大型項目,面對眾多 print 的輸出結果,可能要頭大了。
今天推薦一個 GitHub 熱門開源項目:PySnooper。該項目推出的第一天就收獲 2000+ Star,登上了 GitHub 日榜第一位,如今有近 15k Star??梢娺@是一款 Python 開發(fā)者喜歡的工具。歡迎收藏學習、喜歡點贊支持,文末技術交流可以暢聊!
鏈接:https://github.com/cool-RR/PySnooper
PySnooper 是個什么東西?
如果你寫的 Python 代碼不能按如期那樣運行,你會絞盡腦汁想為啥出錯了。雖然你希望有支持斷點的成熟調試器,但或許你現在不想去設置這樣的調試器。
你想知道哪些行代碼是正常運行,哪些行不正常。據說大多數人會在可疑位置使用 print 輸出語句。
其實 PySnooper 的作用有點類似,你不用小心翼翼地用 print 輸出,只需在想調試的函數中引入一個裝飾器。然后得到函數的詳細日志,包括運行了哪些行、何時運行,以及何時更改了局部變量。
為什么 PySnooper 能從其他智能調試工具中脫穎而出?
因為你可以在不需要進行任何設置的情況下將其用于糟糕的、龐大的企業(yè)代碼庫中。只需打開裝飾器(如下示例所示),并將輸出重定向到一個專用的日志文件,將日志文件路徑指定為第一個參數。
PS:如果無法訪問 stderr,那可以將輸出重定向到指定文件,比如 :@pysnooper.snoop('/my/log/file.log')
使用范例
范例是一個把數字轉成二進制的函數。
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
21:14:32.099769 call 3 @pysnooper.snoop()
21:14:32.099769 line 5 if number:
21:14:32.099769 line 6 bits = []
New var:....... bits = []
21:14:32.099769 line 7 while number:
21:14:32.099769 line 8 number, remainder = divmod(number, 2)
New var:....... remainder = 0
Modified var:.. number = 3
21:14:32.099769 line 9 bits.insert(0, remainder)
Modified var:.. bits = [0]
21:14:32.099769 line 7 while number:
21:14:32.099769 line 8 number, remainder = divmod(number, 2)
Modified var:.. number = 1
Modified var:.. remainder = 1
21:14:32.099769 line 9 bits.insert(0, remainder)
Modified var:.. bits = [1, 0]
21:14:32.099769 line 7 while number:
21:14:32.099769 line 8 number, remainder = divmod(number, 2)
Modified var:.. number = 0
21:14:32.099769 line 9 bits.insert(0, remainder)
Modified var:.. bits = [1, 1, 0]
21:14:32.099769 line 7 while number:
21:14:32.099769 line 10 return bits
21:14:32.099769 return 10 return bits
如果你不想追蹤整個函數,那可以用 with
塊包裝你想追蹤的那部分,如下:
import pysnooper import random 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) foo()
輸出結果
New var:....... i = 9
New var:....... lst = [681, 267, 74, 832, 284, 678, ...]
09:37:35.881721 line 10 lower = min(lst)
New var:....... lower = 74
09:37:35.882137 line 11 upper = max(lst)
New var:....... upper = 832
09:37:35.882304 line 12 mid = (lower + upper) / 2
74 453.0 832
New var:....... mid = 453.0
09:37:35.882486 line 13 print(lower, mid, upper)
Elapsed time: 00:00:00.000344
如何安裝?
最佳方式:pip
$ pip install pysnooper
其他方式:
- Conda:
$ conda install -c conda-forge pysnooper
- Arch Linux:
$ yay -S python-pysnooper
- Fedora Linux:
dnf install python3-pysnooper
技術交流
歡迎轉載、收藏、有所收獲點贊支持一下!
以上就是詳解Python調試神器之PySnooper的詳細內容,更多關于Python PySnooper的資料請關注本站其它相關文章!
版權聲明:本站文章來源標注為YINGSOO的內容版權均為本站所有,歡迎引用、轉載,請保持原文完整并注明來源及原文鏈接。禁止復制或仿造本網站,禁止在非www.sddonglingsh.com所屬的服務器上建立鏡像,否則將依法追究法律責任。本站部分內容來源于網友推薦、互聯網收集整理而來,僅供學習參考,不代表本站立場,如有內容涉嫌侵權,請聯系alex-e#qq.com處理。