点击上方“菜鸟学Python”,选“星标”公众号
重磅干货,第一时间送达
小编学习使用Python已经有5-6年啦,使用 Python 开发过程中,总是避免不了 Debug。小伙伴们,你们都怎样 Debug Python 代码,是不是常用 print 大法?
在本文介绍的这个项目中,Debug Python 代码再也不需要 print 了。只要给有疑问的代码加上装饰器,各种信息一目了然,找出错误也就非常简单了。
这个名为 PySnooper 的项目在 GitHub 上已经收获了13.9K+ 的 Star 量 。它类似于有断点和监视功能的调试器。
01
如何安装
安装 PySnooper 的最佳方法是使用 pip:
pip install pysnooper
02
简单案例介绍
该工具使用采用装饰器的形式,将函数的运行过程以日志的形式进行输出,其记录了运行了哪些代码行,运行的时间及运行到当前代码时各变量的值。
代码运行详细信息如下:
可以看到 PySnooper 把整个函数运行的过程都记录了下来,包括:
1).代码文件所在路径、代码行号等信息,以及每一行代码调用时间信息
2).函数内局部变量 gzh_dict 的值
3).函数的 return 返回值
4).函数运行的整个时间
如果不想跟踪整个函数,则可以将相关部分包装在 with 块中:
代码运行情况如下:
03
5大进阶功能
1).将输出重定向到文件
@pysnooper.snoop() 不传参数时,会将调试的信息输出到标准输出。对于单次调试就能解决的 BUG ,这样没有什么问题,但是有一些 BUG 只有在特定的场景下才会出现,需要你把程序放在后面跑个一段时间才能复现。这种情况下,你可以将调试信息重定向输出到某一日志文件中,方便追溯排查。
2).跟踪全局变量
PySnooper 默认是只跟踪函数体内的局部变量,若需要跟踪全局变量需要给 pysnooper.snoop() 加上参数 watch.
从上可知,如果全局变量 gzh_info 的值有变化时,就会被打印出来。pysnooper.snoop() 还可以接收另外一个参数 watch_explode,和 watch 参数相反,它表示除了这几个参数外的其他所有全局变量都监控。
@pysnooper.snoop(watch_explode="gzh_info")
3).设置调试日志的前缀
当使用 PySnooper 跟踪多个函数时,日志输出会显得很乱,不方便查找文件。对于这种情况,PySnooper 提供了一个参数,方便为不同的函数设置不同的标识,方便在查看日志时进行区分日志属于哪个函数。
4).支持多线程调试模式
PySnooper 同样支持多线程的调试,通过设置参数 thread_info=True ,它就会在日志中打印出函数中对应的线程信息。
5).获得程序执行时间
如果希望输出的时间是相对于程序开始运行的时间,使用relative_time = True 即可。
6).不显示和环境相关的信息
如果只想看代码相关的输出信息,设置 normalize= True 就会删除所有与机器相关的数据(路径,时间戳,内存地址),只显示变量信息:
相对于其他 DEBUG 工具,例如 Pycharm 本地打断点调试,在本地用 IDE 的图形化界面调试无疑是最适合的,但是如果需要调试服务器的Python脚本,并且服务器只能通过堡垒机进行登陆访问, Pycharm 的远程调试就不好用了,PySnooper 的优势就体现出来了。
感兴趣的小伙伴赶紧去试试 PySnooper 吧。
万水千山总是情,点个 ???? 行不行。
-
程序员GitHub,现已正式上线!
-
-
接下来我们将会在该公众号上,专注为大家分享GitHub上有趣的开源库包括Python,Java,Go,前端开发等优质的学习资源和技术,分享一些程序员圈的新鲜趣事。
-
-
推荐阅读:这个GitHub
1400星的Git魔法书火了,斯坦福校友出品丨有中文版贼 TM 好用的 Java 工具类库
-
超全Python IDE武器库大总结,优缺点一目了然!
-
秋招来袭!GitHub28
.5颗星!这个汇聚阿里,腾讯,百度,美团,头条的面试题库必须安利!
-
收获
10400颗星!这个Python库有点黑科技,竟然可以伪造很多
'假'的数据!
-
牛掰了!这个Python库有点逆天了,竟然能把图片,视频无损清晰放大!
-
-
-
点这里,获取一大波福利
转载:https://blog.csdn.net/cainiao_python/article/details/110016940