PySnooper 是一個懶人的除錯程式
你正在試圖找出為什麼 Python 程式碼沒有做你認為它應該做的事情。你可能喜歡使用帶有斷點和監視器的成熟偵錯程式,但是你現在懶得去設定一個。
你想知道哪些行在執行,哪些行沒有執行,以及區域變數的值是什麼?
大多數人會使用 print,在關鍵的位置,並顯示當下的變數值。
PySnooper 可以讓你做同樣的事情,只不過你只需要在你感興趣的函式中新增一個修飾符行(decorator line),而不是精心設計正確的 print。你將得到函式的即時日誌,包括哪些行執行、何時執行以及區域變數何時更改的確切時間。
是什麼使得 pysnoop 從所有其他程式碼智慧工具中脫穎而出?你可以在不需要做任何設定的情況下在較差的、不斷蔓延的企業程式碼庫中使用它。只需啟用 decorator,如下所示,並通過將其路徑指定為第一個引數,將輸出重定向到專用的日誌檔案。
範例
我們正在編寫一個函式,將數字轉換為二進位。讓我們通過新增@pysnooper.snoop() decorator來窺探它:
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)
Stderr 的輸出為
Source path:... /my_code/foo.py
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 number, remainder = divmod(number, 2)
New var:....... remainder = 0
Modified var:.. number = 3
15:29:11.327032 line 9 bits.insert(0, remainder)
Modified var:.. bits = [0]
15:29:11.327032 line 7 while number:
15:29:11.327032 line 8 number, remainder = divmod(number, 2)
Modified var:.. number = 1
Modified var:.. remainder = 1
15:29:11.327032 line 9 bits.insert(0, remainder)
Modified var:.. bits = [1, 0]
15:29:11.327032 line 7 while number:
15:29:11.327032 line 8 number, remainder = divmod(number, 2)
Modified var:.. number = 0
15:29:11.327032 line 9 bits.insert(0, remainder)
Modified var:.. bits = [1, 1, 0]
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:.. [1, 1, 0]
Elapsed time: 00:00:00.000001
或者,如果你不想追蹤整個函式,你可以將相關部分包裹在一個 with block 中。
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
你可以把 stderr 導向到一個 log 檔案
@pysnooper.snoop('/my/log/file.log')
專案網址
也許你會有興趣
不受 FB 演算法影響,歡迎透過 e-mail 訂閱網站更新
不受 FB 演算法影響,歡迎透過 e-mail 訂閱網站更新
支持 Soft & Share
❤️您應該有留意到,我們的網頁並不會出現干擾人的跳出煩人的廣告或是在內容中嵌入廣告,因為我們發現這樣對閱讀網頁的內容體驗真的是不好!
如果您覺得我們提供的內容服務還不錯,歡迎透過對以下產品/服務的購買投資來支持本站的營運走得更遠
如果暫時還不需要以下的付費服務,幫我們把這個網站分享給有需要的朋友,您的小小舉動會對 Soft & Share 有莫大的幫助!感謝您的支持!
🎈如果您點選優惠連結後,還是沒有看到優惠價格,請將瀏覽器的 cookie 清除 ( 清除 udemy 網站的就可以了 ),然後重新點選優惠連結並登入 Udemy 就可以了
- ❤️歡迎透過我們的 A-Z 關鍵字索引 或 Udemy 策展找到您想要的課程
- ❤️更多付費服務(電子書/其他線上課程平台/軟體服務 )……
找相關課程?試看看 Soft & Share 網站搜尋引擎
✍ 搜尋結果太多?可參考 Soft & Share 搜尋引擎使用技巧