相信很多小伙伴平时写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

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

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

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

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

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调试神器PySnooper的使用相关推荐

  1. python 逐行调试工具_Python调试的三个工具

    对于 python 代码的调试我们通常都是使用 IDE 自带的调试功能.但是 IDE 提供的调试功能存在局限性,例如在测试服务器上调试代码,但是又不可能在测试服务器上安装 IDE 进行调试.这时我们就 ...

  2. python设置断点_python调试 设置断点

    原博文 2013-12-09 11:29 − 1在所需要调试的地方加入如下代码: import pdb pdb.set_trace() 2调试代码常用命令: 实例请见参考文献: 1http://www ...

  3. python调试工具中文版_Python调试工具(PySnooper)

    一.简介 通常我们会使用print语句或者第三方工具的debug模式进行调试,PySnooper使用起来十分简单,使用者可以在任何代码库中使用它,而无需进行任何设置.你只需添加装饰器,并为日志输出地址 ...

  4. python常用的程序调试方法_Python调试的几种方式

    python作为一种脚本语言,很多时候我们习惯于它的简洁,习惯于它的修改就能看到结果的特性.对于python的调试,有很多种方式,今天我们就来简单介绍下. Print 对于脚本语言,调试最简单的方式就 ...

  5. python可以调试吗_python调试的几种方法

    第一种方法简单直接粗暴有效,就是用print把可能有问题的变量打印出来看看: # err.py def foo(s): n = int(s) print '>>> n = %d' % ...

  6. python可视化神器_python可视化神器——pyecharts库

    pyecharts是什么? pyecharts 是一个用于生成 Echarts 图表的类库.Echarts 是百度开源的一个数据可视化 JS 库.用 Echarts 生成的图可视化效果很是棒,pyec ...

  7. 4分钟告诉你python是什么_Python调试方法有哪些,3分钟告诉你Python调试命令怎么用...

    程序员能一次写完程序并正常运行的概率很小,基本不超过1%.总会有各种各样的bug需要修正.有的bug很简单,看看错误信息就知道,有的bug很复杂,我们需要知道出错时,哪些变量的值是正确的,哪些变量的值 ...

  8. python求助神器_python三大神器

    Python 中有很多优秀的包,本文主要讲一下 pip, virtualenv, fabric 1. pip 用来包管理 1 #安装,可指定版本号 2 (sudo) pip install Djang ...

  9. python必备神器_Python 必备神器

    1. pip 用来包管理 # 安装,可指定版本号 (sudo) pip install Django==1.6.8 # 升级 (sudo) pip install bpython --upgrade ...

最新文章

  1. leangoo scrum看板工具轻量协作OKR目标管理
  2. CodeIgniter_2.2.0整合smarty模板引擎
  3. OCP 042全真试题讲解
  4. MATLAB中的分类器
  5. C/Cpp / 设计模式 / 模板模式
  6. OLAP组件-Clickhouse源码
  7. 计算机专业外语英译汉,信科计算机专业英语英译汉
  8. 从世界杯看德国,再看国内
  9. 3G牌照发放脚步渐近 三大运营商提速布局3G
  10. Redis GEO 特性在 LBS 中的应用总结
  11. jdbc防止sql注入-PreparedStatement
  12. python学习第十八天 --文件操作
  13. AJAX from S3 CORS fails on preflight OPTIONS with 403
  14. Docker Compose 笔记
  15. 语言模拟蒲丰问题_播音主持专业艺考模拟主持八大禁忌!
  16. U盘写保护不能格式化文件不能删除解决办法
  17. OSChina 周一乱弹 ——生活不止眼前的苟且
  18. linux如何查看读写权限,Linux系统下如何查看及修改文件读写权限
  19. 恒讯科技分析:香港服务器有效防止DDos攻击的3种方法
  20. c语言中e什么作用是什么,c语言中%e是什么意思

热门文章

  1. 演练 看不见的硬币 1002
  2. javascript-练习-数组数据存li中
  3. -bash: composer: command not found解决办法
  4. linux批量替换文件夹中所有文件内容
  5. 小程序:自定义组件的实现方法及自定义组件与页面间的数据传递
  6. Spring Boot自动配置与Spring 条件化配置
  7. 大量开发者会将访问token和API密钥硬编码至Android应用
  8. sql 动态存储过程
  9. atitit.设计文档---操作日志的实现
  10. Linux模拟超级终端minicom(二)