Python 中取代 Printf 大法的工具

「printf 大法」大概是最先期學到的 debug 方式?不一樣語言有不一樣的指令,在 Python 裏對應的是 print指令 (加上%或是.format)。工具

剛剛看到「 cool-RR/pysnooper 」這個 Python 上的工具,只要增長 @pysnooper.snoop這組 decorator,就能夠自動幫你把變量的值打印出來。網站上的範例是這樣,能夠看到就只是加了一行 decorator:oop

    1. import pysnooper網站

 

    1. @pysnooper.snoopdebug

    2. def number_to_bits(number):code

    3. if number:orm

    4. bits = rem

    5. while number:it

    6. number, remainder = divmod(number, 2)form

    7. bits.insert(0, remainder)import

    8. return bits

    9. else:

    10. return [0]

 

  1. number_to_bits(6)

而後對應的 stderr 就有滿滿的資訊能夠看:

  1. Starting var:.. number = 6

  2. 21:14:32.099769 call 3 @pysnooper.snoop

  3. 21:14:32.099769 line 5 if number:

  4. 21:14:32.099769 line 6 bits =

  5. New var:....... bits =

  6. 21:14:32.099769 line 7 while number:

  7. 21:14:32.099769 line 8 number, remainder = divmod(number, 2)

  8. New var:....... remainder = 0

  9. Modified var:.. number = 3

  10. 21:14:32.099769 line 9 bits.insert(0, remainder)

  11. Modified var:.. bits = [0]

  12. 21:14:32.099769 line 7 while number:

  13. 21:14:32.099769 line 8 number, remainder = divmod(number, 2)

  14. Modified var:.. number = 1

  15. Modified var:.. remainder = 1

  16. 21:14:32.099769 line 9 bits.insert(0, remainder)

  17. Modified var:.. bits = [1, 0]

  18. 21:14:32.099769 line 7 while number:

  19. 21:14:32.099769 line 8 number, remainder = divmod(number, 2)

  20. Modified var:.. number = 0

  21. 21:14:32.099769 line 9 bits.insert(0, remainder)

  22. Modified var:.. bits = [1, 1, 0]

  23. 21:14:32.099769 line 7 while number:

  24. 21:14:32.099769 line 10 return bits

  25. 21:14:32.099769 return 10 return bits

另外還能夠寫到檔案裏裏,能夠指定容許的深度,或是直接指定要打印哪些變量。另外輸出時,也能夠指定 prefix 避免混淆(一般會用在 stderr,也只有 pysnooper 在輸出時)

相關文章
相關標籤/搜索