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

最新文章

  1. Dijkstra算法(三)之 Java详解
  2. Python教程[廖雪峰],主要是实践
  3. 清空KindEditor富文本编辑器里面的内容方法
  4. UVA 11021 C - Tribles(概率DP)
  5. 20145330《Java学习笔记》第一章课后练习8知识总结以及IDEA初次尝试
  6. 初学ExtJs 表格显示后台数据
  7. poj 1017 Packets 裸贪心
  8. Provider Communication with Apple Push Notification Service
  9. RT: np - new sbt project generation made simple(r)
  10. IOS 设备信息读取
  11. JSON-C结构简介、使用
  12. 添加可运行的js代码
  13. VBS虚拟键码
  14. [刷题]算法竞赛入门经典(第2版) 5-4/UVa10763 - Foreign Exchange
  15. Java URL类踩坑指南
  16. 2015多校联赛 ——HDU5288(数学)
  17. Linux 文件日志筛选操作
  18. HTTP中的Get与Post
  19. Directed Graph Loop detection and if not have, path to print all path.
  20. Sql Server 关于SET IDENTITY_INSERT的问题

热门文章

  1. 热点 | github近期热点项目汇总
  2. React入门(2)
  3. HDU - 2444 二分图最大匹配 之 判断二分图+匈牙利算法
  4. IOS 手动添加第三方库报错问题
  5. 如何在Linux下优雅的查询日志
  6. Java读源码之ReentrantLock
  7. F - 我们什么时候能见面? POJ - 2028
  8. RedHat 6.7 使用 CentOS 6 的源
  9. PTA数据结构与算法题目集(中文) 7-37 模拟EXCEL排序 (25 分)
  10. 数据库服务软件类型和配置redis