• Python 中取代 Printf 大法的工具


    「printf 大法」大概是最早期学到的 debug 方式?不同语言有不同的指令,在 Python 里对应的是 print指令 (加上%或是.format)。

    刚刚看到「 cool-RR/pysnooper 」这个 Python 上的工具,只要增加 @pysnooper.snoop这组 decorator,就可以自动帮你把变量的值打印出來。网站上的范例是这样,可以看到就只是加了一行 decorator:

      1. import pysnooper

      1. @pysnooper.snoop

      2. def number_to_bits(number):

      3. if number:

      4. bits =

      5. while number:

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

      7. bits.insert(0, remainder)

      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 在输出时)

  • 相关阅读:
    使用 Helm【转】
    部署 Helm【转】
    Helm 架构【转】
    Why Helm?【转】
    用 ConfigMap 管理配置【转】
    js argument实参集合与局部变量、参数关系
    js 定时器
    JVM的调优
    Java异常,以及finally不会执行的情况
    Java绑定
  • 原文地址:https://www.cnblogs.com/cuiyubo/p/10823576.html
Copyright © 2020-2023  润新知