【python】PySnooper - Never use print for debugging again

    目前的python调试程序时主要有三种方法:pdb打断点调试、print调试和本文要讲的pysnooper,个人之前比较倾向于print输出,后来发现随着功能的增多需要写更多的print,比较繁琐,而pysnooper可以对整个函数、函数的局部代码、全部变量等进行追踪,我们只需要在需要调试的地方加上装饰器@pysnooper.snoop()或者对函数的局部添加withpysnooper.snoop()即可轻松查看函数以及变量的执行与变化过程,简化调试,方便定位问题。下面结合代码说明一下pysnooper的使用。

    通过查阅源码可知道@pysnooper.snoop()主要有7个参数依次为output、watch、watch_explode、depth、prefix、overwrite、thread_info下面通过实力依次讲解。

1、output参数:主要用于将调试信息进行输出,默认是打屏输出,可以通过设置该值将调试信息输出到日志

【python】PySnooper - Never use print for debugging again_第1张图片
【python】PySnooper - Never use print for debugging again_第2张图片

    如果不想调试整个函数,只想调试函数中的部分代码可通过添加with语句块即可实现对函数部分代码的调试,如下图所示:


【python】PySnooper - Never use print for debugging again_第3张图片

2、watch参数用于监控一些非局部变量的值的变化,需要注意监控的变量名以字符串形式显示,如下:


【python】PySnooper - Never use print for debugging again_第4张图片

3、watch_explode参数功能类似于watch,只不过watch_explode将被监控对象的所有属性或项列举出来。

4、depth参数用于显示函数调用深度的调试信息比如a函数调用了b函数,b函数调用了c函数,如果此时depth=1(默认)则不会显示b、c函数的调试信息,若depth=2则会显示a、b函数的调试信息,依次类推。


【python】PySnooper - Never use print for debugging again_第5张图片

5、prefix参数用于设置调试信息前缀,用于区别不同的调试信息,设置prefix=‘prefix’,显示如下:


【python】PySnooper - Never use print for debugging again_第6张图片

6、overwrite参数为True时,当调试信息输出到文件时,此时会覆盖掉原有的调试信息; false不会覆盖原有信息,默认为false,当为true时,运行结果如下:

【python】PySnooper - Never use print for debugging again_第7张图片

    个人感觉在做与python有关的项目的单元测试的时候,可以通过该方法可以清楚的知道函数每一步的执行过程,从而快速定位问题,更多源码参见 https://github.com/cool-RR/PySnooper

你可能感兴趣的:(【python】PySnooper - Never use print for debugging again)