人妖在线一区,国产日韩欧美一区二区综合在线,国产啪精品视频网站免费,欧美内射深插日本少妇

新聞動態(tài)

詳解Python調試神器之PySnooper

發(fā)布日期:2021-12-12 16:15 | 文章來源:站長之家

相信很多程序員在調試代碼時,都用過 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處理。

相關文章

實時開通

自選配置、實時開通

免備案

全球線路精選!

全天候客戶服務

7x24全年不間斷在線

專屬顧問服務

1對1客戶咨詢顧問

在線
客服

在線客服:7*24小時在線

客服
熱線

400-630-3752
7*24小時客服服務熱線

關注
微信

關注官方微信
頂部