美文网首页python
再见Print,用这个更香!

再见Print,用这个更香!

作者: 菜鸟学python | 来源:发表于2020-12-02 19:51 被阅读0次

小编学习使用Python已经有5-6年啦,使用 Python 开发过程中,总是避免不了 Debug。小伙伴们,你们都怎样 Debug Python 代码,是不是常用 print 大法?

在本文介绍的这个项目中,Debug Python 代码再也不需要 print 了。只要给有疑问的代码加上装饰器,各种信息一目了然,找出错误也就非常简单了。

这个名为 PySnooper 的项目在 GitHub 上已经收获了13.9K+ 的 Star 量 。它类似于有断点和监视功能的调试器。

01 如何安装

安装 PySnooper 的最佳方法是使用 pip:

<pre style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important;">pip install pysnooper</pre>

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 参数相反,它表示除了这几个参数外的其他所有全局变量都监控。

<pre style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important;">@pysnooper.snoop(watch_explode="gzh_info")</pre>

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,前端开发等优质的学习资源和技术,分享一些程序员圈的新鲜趣事。

目前wx搜索Python 【菜鸟学Python】排第二,汇聚了30万Python爱好者,累计原创近400篇趣味干货(爬虫,数据分析,算法,面试指南,原创趣味实战,Python游戏,机器学习),欢迎一起学Python,交流指正。

相关文章

  • 再见Print,用这个更香!

    小编学习使用Python已经有5-6年啦,使用 Python 开发过程中,总是避免不了 Debug。小伙伴们,你们...

  • 再见Print,用这个更香!

    在日常的Python学习或者是使用中,无论是正常的结果输出还是程序的调试,大家都会使用到print这个Python...

  • 再见,print

    学python学到的第一个函数就是print 不管是新手还是老手,都会经常用来调试代码。但是对于稍微复杂的对象,打...

  • 再见Print ! 这个神器PySnooper 来了!

    推荐:Python全栈教程!花了29980买的从入门到精通课程,分享给大家[https://www.bilibil...

  • python入门学习笔记

    1.输出:a.用print(),如>>>print('hello,world')b.每个单引号之间用逗号(,)相连...

  • python 调试

    调试 1、使用正常的 print()进行输出: 用 print() 不好的地方就是,程序中到处都是 print()...

  • Swift学习一 初步认识

    //swift中打印用 print,句末中可以不用分号结尾// print("hello world");

  • Markdown语法

    代码code 用``包括的为单行代码print(a) print(b) 用``````包括的为代码块 每行缩进4格...

  • python基础(五)----基本语句

    一.print语句 print语句后面可以接任何类型,多个表达式用逗号隔开。(python3.0之后,print变...

  • python入坑第六天|字符串

    前面我们已经学习了用print()方法来打印'Hello world!',这个'Hello world!'其实就是...

网友评论

    本文标题:再见Print,用这个更香!

    本文链接:https://www.haomeiwen.com/subject/tzfuwktx.html