python调试神器PySnooper的使用


Posted in Python onJuly 03, 2019

相信很多小伙伴平时写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的值就会抛异常

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现目录树生成示例
Mar 28 Python
浅析Python中signal包的使用
Nov 13 Python
Python 比较两个数组的元素的异同方法
Aug 17 Python
Python3爬虫全国地址信息
Jan 05 Python
Pycharm 设置默认头的图文教程
Jan 17 Python
python3使用QQ邮箱发送邮件
May 20 Python
python将pandas datarame保存为txt文件的实例
Feb 12 Python
python Tkinter版学生管理系统
Feb 20 Python
复化梯形求积分实例——用Python进行数值计算
Nov 20 Python
pytorch绘制并显示loss曲线和acc曲线,LeNet5识别图像准确率
Jan 02 Python
python的Jenkins接口调用方式
May 12 Python
python爬虫要用到的库总结
Jul 28 Python
详解DeBug Python神级工具PySnooper
Jul 03 #Python
使用python来调用CAN通讯的DLL实现方法
Jul 03 #Python
opencv python 图像轮廓/检测轮廓/绘制轮廓的方法
Jul 03 #Python
在cmd中查看python的安装路径方法
Jul 03 #Python
python动态进度条的实现代码
Jul 03 #Python
OpenCV 轮廓检测的实现方法
Jul 03 #Python
python实现文本进度条 程序进度条 加载进度条 单行刷新功能
Jul 03 #Python
You might like
php中使用redis队列操作实例代码
2013/02/07 PHP
Yii实现显示静态页的方法
2016/04/25 PHP
PHP魔术方法之__call与__callStatic使用方法
2017/07/23 PHP
thinkphp ajaxfileupload实现异步上传图片的示例
2017/08/28 PHP
PHP通过get方法获得form表单数据方法总结
2018/09/12 PHP
一款JavaScript压缩工具:X2JSCompactor
2007/06/13 Javascript
Javascript注入技巧
2007/06/22 Javascript
javascript中验证大写字母、数字和中文
2014/01/15 Javascript
Javascript浮点数乘积运算出现多位小数的解决方法
2014/02/17 Javascript
JavaScript笔记之数据属性和存储器属性
2016/03/31 Javascript
jQuery实现可编辑表格并生成json结果(实例代码)
2017/07/19 jQuery
JavaScript实现计算多边形质心的方法示例
2018/01/31 Javascript
玩转vue的slot内容分发
2018/09/22 Javascript
tsconfig.json配置详解
2019/05/17 Javascript
js基础之事件捕获与冒泡原理
2019/10/09 Javascript
mpvue实现小程序签到金币掉落动画(api实现)
2019/10/17 Javascript
[03:01]DOTA2英雄基础教程 露娜
2014/01/07 DOTA
python基础教程之常用运算符
2014/08/29 Python
Python中的迭代器漫谈
2015/02/03 Python
Tensorflow中使用tfrecord方式读取数据的方法
2018/06/19 Python
Python 实现中值滤波、均值滤波的方法
2019/01/09 Python
python+pyqt5实现24点小游戏
2019/01/24 Python
Python实现的删除重复文件或图片功能示例【去重】
2019/04/23 Python
pywinauto自动化操作记事本
2019/08/26 Python
小天鹅官方商城:LittleSwan
2017/06/16 全球购物
思想专业自荐信范文
2013/12/25 职场文书
企业员工培训感言
2014/02/26 职场文书
品质标语大全
2014/06/21 职场文书
医学求职自荐信
2014/06/21 职场文书
花坛标语大全
2014/06/30 职场文书
2014年自愿离婚协议书
2014/10/10 职场文书
客户付款通知书
2015/04/23 职场文书
公司员工离职感言
2015/08/03 职场文书
Python利用机器学习算法实现垃圾邮件的识别
2021/06/28 Python
java版 简单三子棋游戏
2022/05/04 Java/Android
MySQL远程无法连接的一些常见原因总结
2022/09/23 MySQL