DeBug Python代码全靠print函数?换用这个一天2K+Star的工具吧
副问题[/!--empirenews.page--]
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() 加到该函数上,就大功告成了。
该函数返回的日记如下,我们可以看到在挪用 number_to_bits 函数时,赋予参数 number 的初始值为 6。然后,PySnooper 就照旧对着源代码一行行说明白。 如上说明所示,函数每建设一个新变量,那么这个变量的值、这个变量的变革城市展示出来。并且 PySnooper 还将轮回睁开,因此变革的细节越发明晰。最终 6 的二进制版本应该是 [1, 1, 0],它的变革进程也展示在 bits 变量中。 此刻通过这些具体信息,PySnooper 再也不消担忧我们用 print 函数强行 deBug 了。 PySnooper 具体特性 假如尺度错误输出难以得到,可能太长了,那么可以将输出定位到当地文件:
查察一些非当地变量的值:
展示我们函数中挪用函数的 snoop 行:
将全部 snoop 行以某个前缀开始,更轻易定位和找到:
演示 PySnooper 下面我们最开始实行行使 PySnooper 获取 TensorFlow 的信息,假如它能获取各类张量信息,那可就太强盛了。 起首行使 pip 安装包:
公然,TensorFlow 这种静态图并不能很好地获守信息,读者也可实行一下。后头我们试了试 NumPy,但愿能获取整个计较流的信息。如下代码所示,我们建设了两个数组变量,而且 2×2 的矩阵会连乘多次,假如能追踪到这种连乘,那就较量甜头理赏罚错误。
对付 NumPy,该器材确实能追踪全部可疑变量的变革进程。虽然在现实运算中,矩阵乘法的维度会很是大,我们可以直接追踪外形(Shape),而不是详细的值。 (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |