發現乙個python除錯神器 PySnooper

2021-09-20 03:10:37 字數 2261 閱讀 7459

pysnooper - 不要再使用print進行除錯

斷點等除錯方法雖然強大,但是設定比較麻煩。為此print成了很多人的最愛。

pysnooper讓你做print的事情,但不需要麻煩地新增很多語句,你只需要新增裝飾器就可以得到執行日誌,包括線執行,及對應變數的值。

安裝

pip install 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]

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

特徵

如果不方便訪問stderr,則可以重定向到檔案:

@pysnooper.snoop('/my/log/file.log')
檢視非區域性變數的值:

@pysnooper.snoop(variables=('foo.bar', 'self.whatever'))
顯示函式呼叫的snoop行:

@pysnooper.snoop(depth=2)
窺探指定字首的行:

@pysnooper.snoop(prefix ='zzz')

乙個小發現

最近在看一些筆試題目,比如說諸如 例一 解答 變換一次就成為為1的只有 2 2 2 變換兩次就成為1的也只有乙個4 4 2 2 2 變換三次就成為1的有兩個數 3 3 1,4 2,2 2 和 8 8 2,4 2,2 2 變換四次就成為1的有三個數6 7 和16 就不一一列了 所以發現這是乙個fib數...

發現乙個問題

今天發現乙個問題。產生這種現象的原因在於maya的節點求值機制。在模擬過程中,是不斷進行以下步驟 1.maya自動對節點網路求值。包括粒子系統狀態更新,動力學系統模擬 2.進行有限元模擬,算出網格頂點的位置 速度 加速度等結果 3.把結果寫入下一幀 4.跳到下一幀 都有相同的結果。所以模擬結果必須寫...

發現乙個引數方程

猶豫了很久,只是出於好奇的目的,還是把它公布出來吧。xy 2.10526 0.5275 0.15t coss sins ln s t 0.23753 s t coss 其中 s 1,0 是曲線長度相關的引數 t 0.35 0.82 是表達曲線形狀變化的時間引數的變數。從而可以動態表示為 lb 0.3...