Python Debug代码全靠Print?代码调试的极简体验—Pysnooper模块

Python开发过程中进行Debug操作,想必是所有开发者都不可缺少的环节。通常,我们在Debug代码时,一般采用以下几种方式:

  • IDE调试器
  • Print 大法
  • Log日志

但,这些方法都存在无法忽视的痛点:

  • 流畅度低、繁琐、重复性高
  • 依赖工具

本文将介绍不同与以上几种方式的极简DeBug方法,仅需要向目标函数添加一个装饰器即可。我们会得到该函数的详细Log信息,其中包含代码执行顺序、变量值变化过程、时间等。接下来让我们了解下PySnooper 的使用方法。


"PySnooper is a poor man's debugger."

PySnooper适用于调试单个函数,能够方便的感知函数变量的变化过程、当前运行所在代码位置,并支持输出存储为文件。

安装

使用pip进行安装

 pip install pysnooper 

特点

  • 输出关于某个函数中变量值变化过程,包括变量的值、所执行的对应代码行、时间。
  • 输出信息可重定向至Log文件;
  • 输出多个指定非局部变量的值;
  • 输出调试函数所引用的函数的变量变化过程;
  • 在缓存中输出记录,提高运行速度;

使用pysnooper 对函数进行Debug

如下函数实现读取 File.txt文件(文件内容如上),并且使用行号、每行内容构造字典进行存储,字典结构为{行号:当前行的内容,行号:当前行的内容}。

执行如上代码,输出结果如下。我们可以清楚看到执行时间、变量值改变过程及变量发生变化时所对应的的代码、以及返回变量值。


使用pysnooper对函数局部进行Debug

可以将相关部分包含在with pysnooper.snoop()块中,如下

执行如上代码,输出结果如下。我们可以看到for循环过程中每次遍历时,index、line、line_index变量值及其所执行的代码。


使用pysnooper对Debug信息进行重定向

如果Debug信息过长,那么可以将输出保存到指定文件中,如下,我们将Debug信息保存至Debug.log中。


使用pysnooper查看非局部变量值

pysnooper修饰器中使用watch参数查看一个或多个非局部变量的值及改变过程,如下,查看other变量的改变过程。

执行如上代码,输出结果如下。在如下Debug信息中,我们可以看到 “Starting var:.. other = {'age': 27, 'name': 'iTestOps'} ” 信息。


使用pysnooper展开字典或者列表显示它的所有属性值

pysnooper修饰器中使用参数watch_explode,可以展开字典或者列表显示它的所有属性值。

执行如上代码,输出结果如下,可以看出watch_explode能够展开字典的属性值。


使用pysnooper 查看函数中调用的其他函数里变量值

pysnooper修饰器中使用参数depth,输出调试函数所引用的函数的变量值变化过程。

执行如上代码,输出结果如下,我们可以看到get_time()中now_time变量值。


将所有 snoop 行以某个前缀开始

将所有 snoop 行以某个前缀开始,更容易定位和找到,我们使用函数名为前缀,如下。

执行如上代码,输出结果如下,我们可以看到每行Debug日志都含read_file_content前缀。

若感兴趣,欢迎关注、评论支持。

发表评论
留言与评论(共有 0 条评论)
   
验证码:

相关文章

推荐文章

'); })();