- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章python调试神器PySnooper的使用由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
相信很多小伙伴平时写python的时候都是需要调试程序的,出问题了,需要了解函数内部是怎么跑的,而这个时候很多人都会想到在疑惑的地方使用print函数来打印一下参数来调试。虽然用print也是不失为是一种方法,但是有时如果疑惑的地方多就要每个地方都要加print,这样就显得比较麻烦了.
今天发现在Github开源了一个神器,可以清楚让你清楚了解函数内部的运行以及参数值的变化,PySnooper,项目地址:https://github.com/cool-RR/PySnooper 。
使用简单,强大,谁用谁知道它的好!下面简单说一下PySnooper的用法:
这个工具使用起来很简单,首先直接可以使用 pip 安装:pip install pysnooper使用时,只需要在每个函数前面添加装饰器即可。 给个简单例子看看就知道了, 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
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 。
当然如果嫌弃这个直接输出内容还想保存日志记录的话,这个装饰器还几个可选参数,例如:
1
|
@pysnooper
.snoop(
'log/file.log'
)
|
先创建好log目录,然后将日志输出到file文件中.
1
|
@pysnooper
.snoop(prefix
=
'removeDuplicates: '
)
|
给调试的行加个前缀名便于辨识和定位,这个参数适用于如果同时调试多个函数使用,我这里的例子是使用了函数名称来作为前缀名,摘抄一点日志记录如下:
1
2
3
|
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
|
1
|
@pysnooper
.snoop(variables
=
(
'foo.bar'
,
'self.whatever'
))
|
查看非本地变量 。
1
|
@pysnooper
.snoop(depth
=
2
)
|
显示函数中调用函数的snoop行,depth参数的取值范围是大于或等于1的正整数,在源码里有这样一个判断:assert self.depth >= 1,当取小于1的值就会抛异常 。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我.
原文链接:https://www.jianshu.com/p/d26bf8950b59 。
最后此篇关于python调试神器PySnooper的使用的文章就讲到这里了,如果你想了解更多关于python调试神器PySnooper的使用的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我有一个库项目,在 Android Studio 1.3.0 上开发并部署到 Artifactory Open Source Local Repository (3.5) 但是当我尝试在应用程序项目中
logging 是 python 标准模块,用于记录和处理程序中的日志。 功能很强大,官方文档很详细,网上也有大量的说明和教程,但是对很多初次接触的同学来说,存在一些障碍。 一是因为标准库文
我正在尝试使用 Maven 生成用于在 Vignette Portal 上部署的工件。包装与war完全一样工件但文件应该有 car取而代之。 我尝试过但无法完成的选项。 使用 war 插件并重命名最终
为什么 Points AdditiveBlending 只在从右看而不是从左看时有效?设置 depthTest:false 会解决问题,但会引发另一个问题,即点覆盖其他网格。 My fir
我对 UITextField 在动画 block 中移动时出现的工件有疑问... 在我移动我的 UITextField 之前它看起来像这样: 像这样移动之后: 我的猜测是它与 UITextField
单击此导航菜单中的第一个下拉菜单后,它将按预期加下划线,一旦菜单失去焦点(即单击页面上的其他位置),标签末尾的下划线不会被删除。 仅在 Chrome(版本 45.0.2454.85 m)中发生 我希望
我有一个简单的“hello world”C++ 项目:https://github.com/RomainGoussault/Deepov 我使用 Eclipse IDE for C/C++ Devel
使用方法有两种,可以用 XShell 或 Putty 上去命令查看,也可以生成 html 报告。 下面介绍GoAccess 在 CentOS 上的安装方法: 1. 需要安装 GeoIP, ncu
我一整天都在尝试将我的 javafx 应用程序转换为 jar 文件。我正在使用 Java 1.7 更新 7。 Oracle 有 some information ,但它似乎散落在各处。 Intelli
我实际上希望通过项目中的传递依赖项获得 powermock 1.5.6 版,但我只得到 1.4.11。这是什么意思? 最佳答案 在解析依赖项时,Maven 将更喜欢 POM 部分中指定的版本,而不是从
是否有公开可用的 maven 存储库将 Apache Tomcat 二进制分发 ZIP 托管为 maven Artifact (我的意思是可以通过 http://tomcat.apache.org 下
我希望在单击时播放 mp4 工件文件。 但是,当我点击mp4工件文件时,它看起来像下图。它不播放 如果我下载它然后我可以在我的本地 PC 上播放它。 所以我尝试了 HTML5 嵌入功能来流式传输它。我
我在 VSTS 上设置了构建/测试/发布。我们还有另一个管道(在 Linux 中)从具有给定构建 ID 的构建系统中获取构建工件。那么有没有办法从 Linux 上的 VSTS 下载构建工件?我发现不登
用 Ventoy 创建多启动 U 盘,你将永远不会缺少自己喜欢的 Linux 发行版。 给朋友和邻居一个可启动 U 盘,里面包含你最喜欢的 Linux 发行版,是向 Linux 新手介绍我们都
API 管理工具可以说是每个前端/后端开发必备的工具了,一个好的 API 管理工具可以提高团队的工作效率。 目前市面上有不少 API 相关的工具,比如 Postman、swagger 等。最近我也尝试
我有一个关于 JFrog Artifactory 用于在 Artifact 中查找“事物”的 AQL( Artifact 查询语言)的问题。 AQL 似乎非常强大,但我想知道如何使用正确的术语构建(正
我正在使用 Maven 3.1.1、Java 6 和 JBoss 7.1.3。我想在我的 JSP 上将对象呈现为 JSON,但是当我将其包含在我的 pom 中时
每次我对 POM 进行最微小的更改时,Intellij 都会删除项目结构输出目录设置中分解 Artifact 的 .war 扩展名。这会导致 Intellij 的运行/调试配置出错: Artifact
我的目标是进行对象跟踪。 我有一个 UWP c# 应用程序和链接的 c++ windows 运行时组件。在那里我可以获得对 opencv 的访问权限。 在 c# 中,MediaCapture 返回 S
遵循 http://doc.gitlab.com/ee/ci/yaml/README.html 的文档设置文件 .yml 我通过创建 artifacts 发现了问题,当构建要下载此 ZIPAPK 文件
我是一名优秀的程序员,十分优秀!