python调试神器PySnooper的使用

作者:吃鱼益智 时间:2021-08-28 23:25:49 

相信很多小伙伴平时写python的时候都是需要调试程序的,出问题了,需要了解函数内部是怎么跑的,而这个时候很多人都会想到在疑惑的地方使用print函数来打印一下参数来调试。虽然用print也是不失为是一种方法,但是有时如果疑惑的地方多就要每个地方都要加print,这样就显得比较麻烦了。

今天发现在Github开源了一个神器,可以清楚让你清楚了解函数内部的运行以及参数值的变化,PySnooper,项目地址:https://github.com/cool-RR/PySnooper

使用简单,强大,谁用谁知道它的好!下面简单说一下PySnooper的用法:

这个工具使用起来很简单,首先直接可以使用 pip 安装:pip install pysnooper使用时,只需要在每个函数前面添加装饰器即可。
给个简单例子看看就知道了,


import pysnooper
@pysnooper.snoop()
def removeDuplicates(nums):
 """
 :type nums: List[int]
 :rtype: int
 """
 flag = 0
 i=1
 while i<len(nums):
   if nums[i]==nums[i-1]:
     flag+=1
     i+=1
     if flag>=2:
       del nums[i-1]
       i-=1
   else:
     i+=1
     flag=0
 return len(nums)

nums = [1,1,1,2]
print(removeDuplicates(nums))

添加装饰器后,运行代码就会输出对应函数的执行数据

Starting var:.. nums = [1, 1, 1, 2]
13:03:44.990194 call        11 def removeDuplicates(nums):
13:03:44.990695 line        16     flag = 0
New var:....... flag = 0
13:03:44.990695 line        17     i=1
New var:....... i = 1
13:03:44.990695 line        18     while i<len(nums):
13:03:44.990695 line        19         if nums[i]==nums[i-1]:
13:03:44.990695 line        20             flag+=1
Modified var:.. flag = 1
13:03:44.990695 line        21             i+=1
Modified var:.. i = 2
13:03:44.991193 line        22             if flag>=2:
13:03:44.991193 line        18     while i<len(nums):
13:03:44.991193 line        19         if nums[i]==nums[i-1]:
13:03:44.991193 line        20             flag+=1
Modified var:.. flag = 2
13:03:44.991193 line        21             i+=1
Modified var:.. i = 3
13:03:44.991193 line        22             if flag>=2:
13:03:44.991193 line        23                 del nums[i-1]
Modified var:.. nums = [1, 1, 2]
13:03:44.991193 line        24                 i-=1
Modified var:.. i = 2
13:03:44.991193 line        18     while i<len(nums):
13:03:44.991193 line        19         if nums[i]==nums[i-1]:
13:03:44.991193 line        26             i+=1
Modified var:.. i = 3
13:03:44.991693 line        27             flag=0
Modified var:.. flag = 0
13:03:44.991693 line        18     while i<len(nums):
13:03:44.991693 line        28     return len(nums)
13:03:44.991693 return      28     return len(nums)
Return value:.. 3

当然如果嫌弃这个直接输出内容还想保存日志记录的话,这个装饰器还几个可选参数,例如:


@pysnooper.snoop('log/file.log')

先创建好log目录,然后将日志输出到file文件中。


@pysnooper.snoop(prefix='removeDuplicates: ')

给调试的行加个前缀名便于辨识和定位,这个参数适用于如果同时调试多个函数使用,我这里的例子是使用了函数名称来作为前缀名,摘抄一点日志记录如下:


removeDuplicates: Starting var:.. nums = [1, 1, 1, 2]
removeDuplicates: 13:53:14.322036 call    11 def removeDuplicates(nums):
removeDuplicates: 13:53:14.323037 line    16   flag = 0

@pysnooper.snoop(variables=('foo.bar', 'self.whatever'))

查看非本地变量


@pysnooper.snoop(depth=2)

显示函数中调用函数的snoop行,depth参数的取值范围是大于或等于1的正整数,在源码里有这样一个判断:assert self.depth >= 1,当取小于1的值就会抛异常

来源:https://www.jianshu.com/p/d26bf8950b59

标签:python,PySnooper
0
投稿

猜你喜欢

  • Python常见异常的处理方式浅析

    2022-05-14 17:32:37
  • 互联网一家之言(一):叫用户为你买单

    2009-06-09 11:32:00
  • Python 自由定制表格的实现示例

    2023-11-11 16:54:41
  • JS重载实现方法分析

    2023-10-07 08:09:04
  • Css Reset(复位)整理

    2008-09-09 21:58:00
  • Python实现在matplotlib中两个坐标轴之间画一条直线光标的方法

    2022-08-13 21:32:25
  • asp的系统变量ServerVariables (“HTTP_USER_AGENT“)问题

    2009-02-04 15:51:00
  • Python获取电脑硬件信息及状态的实现方法

    2023-01-23 21:24:15
  • Python实现多条件筛选目标数据功能【测试可用】

    2023-07-17 21:03:46
  • 在MySQL中获得更好的全文搜索结果

    2008-05-09 10:38:00
  • php设计模式之装饰模式应用案例详解

    2023-11-14 13:37:20
  • Java连接sqlserver2008数据库代码

    2023-07-02 10:22:17
  • 简单的asp采集代码教程

    2011-04-18 10:39:00
  • python 多态 协议 鸭子类型详解

    2023-10-03 11:53:00
  • 一个css与js结合的下拉菜单支持主流浏览器

    2023-07-18 01:28:20
  • pycharm部署django项目到云服务器的详细流程

    2021-05-27 23:32:19
  • asp日期函数运用--生成简单的日历

    2008-08-15 13:47:00
  • XSL学习教程:运算符和函数

    2008-01-22 18:24:00
  • 根据Dreamweaver里的ToolTip代码改进的提示框

    2008-11-27 12:19:00
  • numpy ndarray 按条件筛选数组,关联筛选的例子

    2021-04-12 04:58:09
  • asp之家 网络编程 m.aspxhome.com