小言_互联网的博客

再见Print,用这个更香!

290人阅读  评论(0)

点击上方“菜鸟学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 吧。

万水千山总是情,点个  ????  行不行。


   
  1. 程序员GitHub,现已正式上线!
  2. 接下来我们将会在该公众号上,专注为大家分享GitHub上有趣的开源库包括Python,Java,Go,前端开发等优质的学习资源和技术,分享一些程序员圈的新鲜趣事。

   
  1. 推荐阅读:这个GitHub 1400星的Git魔法书火了,斯坦福校友出品丨有中文版贼 TM 好用的 Java 工具类库
  2. 超全Python IDE武器库大总结,优缺点一目了然!
  3. 秋招来袭!GitHub28 .5颗星!这个汇聚阿里,腾讯,百度,美团,头条的面试题库必须安利!
  4. 收获 10400颗星!这个Python库有点黑科技,竟然可以伪造很多 '假'的数据!
  5. 牛掰了!这个Python库有点逆天了,竟然能把图片,视频无损清晰放大!
  6. 点这里,获取一大波福利

转载:https://blog.csdn.net/cainiao_python/article/details/110016940
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场