百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

DeBug Python代码全靠print函数?换用这个一天2K+Star的工具吧

off999 2024-10-14 12:14 35 浏览 0 评论

print 函数已老,DeBug 该靠 PySnooper 了~

小伙伴们,你们都怎样 DeBug Python 代码?是不是常用 print 大法?在本文介绍的这个项目中,deBug Python 代码再也不需要 print 了。只要给有疑问的代码加上装饰器,各种信息一目了然,找出错误也就非常简单了。

这个名为 PySnooper 的项目是刚开源的,仅仅一天就获得了 2K+ 的 Star 量,当然这「一天」还没结束,这个收藏量也会继续刷新。

项目地址:https://github.com/cool-RR/pysnooper

Python 怎样 DeBug?

如果写着写着模型,发现模型不 work 了,那么你该怎样找出 Python 的错误语句?这种错误一般与语法无关,而是某个变量的运算发生了错误。接下来我们就要慢慢找哪个地方有问题了,这里最常见、最直观的方法就是 print 大法。把我们怀疑的变量打印出来,总会找到异常的地方。

如果代码中嵌入了单元测试,例如 assert 语句,那么还能缩小一些怀疑范围。但通常我们都要多次尝试,打印多个变量才能找到错误的地方。在 PyTorch 或 Keras 这样的动态计算图还好,打印出来的直接是一个值,像 TensorFlow 这样的静态计算图,打印出来是张量信息而不是值,这就很尴尬了。

实际上不止是机器学习,在我们写 Python 的时候,总是想搞清楚为什么写的代码在运行时有点不大对。很多读者乐于使用断点等成熟的 DeBug 工具,也有的直接使用 print 大法找错误的地方。但现在我们不需要担心了,本文将介绍一个新的开源工具,它信心满满地呼吁到:「不要再使用 print 函数来 DeBug 啦~」

极简DeBug工具PySnooper

一般情况下,想要知道哪一行代码在运行、哪一行不运行、本地变量的值是多少时,大部分人会使用 print 函数,在关键部分打印某个或某组变量的值、形状、类型等信息。

而 PySnooper 让你能快速地获得这些信息,且相比之下它不需要细致地写 print 函数,只需要向感兴趣的函数增加一个装饰器就行了。我们会得到该函数的详细 log,包含哪行代码能运行、什么时候运行以及本地变量变化的确切时间。

相比于其他代码智能工具,PySnooper 为何如此优秀?因为不需要任何设置,你就可以在劣等、不规则的企业代码库上使用 PySnooper。只需要加个装饰器,并为日志输出地址指定路径就行了。

这样说可能不太直观,下面我们可以具体看个案例,PySnooper 的优秀就能一目了然。

PySnooper 案例

下面项目作者写了一个函数以将数值转换为二进制码,该函数返回的是一个二进制列表。下面我们将装饰器 @pysnooper.snoop() 加到该函数上,就大功告成了。

import pysnooper
@pysnooper.snoop()
def number_to_bits(number):
 if number:
 bits = []
 while number:
 number, remainder = divmod(number, 2)
 bits.insert(0, remainder)
 return bits
 else:
 return [0]
number_to_bits(6)

该函数返回的日志如下,我们可以看到在调用 number_to_bits 函数时,赋予参数 number 的初始值为 6。然后,PySnooper 就还是对着源代码一行行分析了。

如上分析所示,函数每创建一个新变量,那么这个变量的值、这个变量的变化都会展示出来。而且 PySnooper 还将循环展开,因此变化的细节更加明确。最终 6 的二进制版本应该是 [1, 1, 0],它的变化过程也展示在 bits 变量中。

现在通过这些详细信息,PySnooper 再也不用担心我们用 print 函数强行 deBug 了。

PySnooper 详细特征

如果标准错误输出难以获得,或者太长了,那么可以将输出定位到本地文件:

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

查看一些非本地变量的值:

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

展示我们函数中调用函数的 snoop 行:

@pysnooper.snoop(depth=2)

将所有 snoop 行以某个前缀开始,更容易定位和找到:

@pysnooper.snoop(prefix='ZZZ ')

演示 PySnooper

下面我们最开始尝试使用 PySnooper 获取 TensorFlow 的信息,如果它能获取各种张量信息,那可就太强大了。

首先使用 pip 安装包:

pip install pysnooper

果然,TensorFlow 这种静态图并不能很好地获取信息,读者也可尝试一下。后面我们试了试 NumPy,希望能获取整个计算流的信息。如下代码所示,我们创建了两个数组变量,并且 2×2 的矩阵会连乘多次,如果能追踪到这种连乘,那就比较好处理错误。

import pysnooper
import numpy as np
@pysnooper.snoop()
def multi_matmul(times):
 x = np.random.rand(2, 2)
 w = np.random.rand(2, 2)
 for i in range(times):
 x = np.matmul(x, w)
 return x
multi_matmul(3)

对于 NumPy,该工具确实能追踪所有可疑变量的变化过程。当然在实际运算中,矩阵乘法的维度会非常大,我们可以直接追踪形状(Shape),而不是具体的值。


相关推荐

音频编辑转换器(音频编辑转换器怎么用)

高转低音频转换器接法是指将一种信号转换成另一种信号的装置。信号是信息存在的形式或载体。在自动化仪表设备和自动控制系统中,常将一种信号转换成另一种与标准量或参考量比较后的信号,以便将两类仪表联接起来,因...

安卓游戏中心下载安装(安卓游戏中心app)

格来云游戏、Nibiru游戏城、快游戏、蟋蟀游戏大厅、石头游戏。以上app资源丰富,且支持外设连接,更新及时。1、格来云游戏:格来云游戏是动视云科技开发的APP,格来云不依赖玩家的电脑性能和储存,连...

正当防卫3手游下载(正当防卫三正版下载)

通过QQ浏览器,或者应用商店下载即可。华为手机上下载《正当防卫4》(JustCause4)的方法如下:方法一:使用华为应用市场(华为AppGallery)1.打开华为应用市场。2.在搜索框中输...

可以免费下载所有歌曲的网站

一、http://51Ape.Com一个免费提供无损音乐下载的网站,专注于Ape音乐、Flac音乐以及Wav等各类高品质无损音乐的免费下载,是目前国内比较好的免费音乐下载网站。二、91听歌网提供无损音...

龙珠斗士z手游版下载(龙珠斗士z手游版下载ios)

召唤神龙,实现愿望。龙珠z斗士中只要集齐七颗龙珠就可以召唤出神龙,来实现自己的愿望。在漫画动画各类手游中都是这样首先进入游戏主界面,点击“斗士”按钮进入选角界面,在选角界面中选择你要使用的角色并确认...

可以手动插人物的游戏手游(可以手动插人物的游戏手游app)

在手游对局中,左上角有一个开关,可切换手动开火和自动开火,切换到自动开火后,准星描到敌方人物即会自动开火。当然,并不是所有模式中都有自动开火开关,是特定的一些模式有该开关,比如挑战模式、刀战模式等。另...

手机铃声最好听的歌(手机铃声最好听的歌曲有哪些)

Everythingisnotwhatitseems超喜欢这首的,绝对不会撞见跟你铃声一样的Push艾薇儿的新歌,很好听,也很适合做铃声Foreverandalways钢琴版副歌部分很好听布兰妮的3也...

千千静听官网(十大免费音乐网站)

千千静听起源于2002年,千千静听是一款完全免费的音乐播放软件,集播放、音效、转换、歌词等众多功能于一身。其小巧精致、操作简捷、功能强大的特点,深得用户喜爱,被网友评为中国十大优秀软件之一,并且成为目...

成品ppt网站国外(免费生成ppt的网站)

免费ppt成品怎么下载?不确定您要下载哪类的ppt。如果想要下载初中语文课件的话,免费成品ppt可以通过无忧无虑中学语文网下载,上面按照年级,教材版本分门别类的课件资源,教案参考,还有相应的练习题,甚...

免费的连连看游戏大全(连连看游戏app推荐)

在4399小游戏里,点击儿童小游戏,里面就有不及时的连连看。《连连看》只要将相同的两张牌用三根以内的直线连在一起消除即可。连连看,又称对对卡,是指图案配对的一种益智游戏,有多种形式,如卡片游戏、电子...

图片文字提取免费工具(图片文字提取免费工具在线)

1.打开手机,进入图库,点击打开一张图片。2.点击【分享】图标进入页面。3.点击【提取文字】。注意,只有手机已安装WPS才会出现此图标。第一种方法需要用到我们的聊天神器:QQ,进入任一聊天框并给...

一键群发500微信群软件(有没有微信一键群发5000人的软件)
一键群发500微信群软件(有没有微信一键群发5000人的软件)

1/8进入设置打开微信进入个人页面后,点击【设置】。2/8进入通用点击【通用】。3/8进入辅助功能点击【辅助功能】。4/8进入群发助手点击【群发助手】。5/8开始群发点击【开始群发】。6/8新建群发点击下方【新建群发】。7/8选择好友在这里...

2026-01-23 06:43 off999

万能驱动离线安装包(万能驱动离线版win10)

一、驱动人生()1、驱动人生为了针对用户的离线使用需求,专门推出了离线版的软件,能够在没有网络的情况下使用。2、通过内置的网卡驱动程序,帮助用户优先安装网卡驱动,进而可以连接网络并继续在网上下载安装驱...

中国象棋天天象棋(中国象棋天天象棋手机版)

天天象棋中的专区对局就是ai区,也就是软件区,专门给引擎下棋的,以前3.0版本里有,我玩过,没啥特别的,一开始匹配的都是新手,因为那个模式有独立的段位机制,后面更新之后就给禁掉了,跟ai对局没意思,还...

百度图片(百度图片官网)
  • 百度图片(百度图片官网)
  • 百度图片(百度图片官网)
  • 百度图片(百度图片官网)
  • 百度图片(百度图片官网)

取消回复欢迎 发表评论: