python 是咋debug的( 二 )

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

如上分析所示,函数每创建一个新变量,那么这个变量的值、这个变量的变化都会展示出来。而且 PySnooper 还将循环展开,因此变化的细节更加明确。最终 6 的二进制版本应该是 ,它的变化过程也展示在 bits 变量中。
现在通过这些详细信息,PySnooper 再也不用担心我们用 print 函数强行 deBug 了。
PySnooper 详细特征如果标准错误输出难以获得,或者太长了,那么可以将输出定位到本地文件:
@pysnooper.snoop(\u0026#39;/my/log/file.log\u0026#39;)查看一些非本地变量的值:
@pysnooper.snoop(variables=(\u0026#39;foo.bar\u0026#39;, \u0026#39;self.whatever\u0026#39;))展示我们函数中调用函数的 snoop 行:
@pysnooper.snoop(depth=2)将所有 snoop 行以某个前缀开始,更容易定位和找到:
@pysnooper.snoop(prefix=\u0026#39;ZZZ \u0026#39;)演示 PySnooper下面我们最开始尝试使用 PySnooper 获取 TensorFlow 的信息,如果它能获取各种张量信息,那可就太强大了。
首先使用 pip 安装包:
pip install pysnooper果然,TensorFlow 这种静态图并不能很好地获取信息,读者也可尝试一下。后面我们试了试 NumPy,希望能获取整个计算流的信息。如下代码所示,我们创建了两个数组变量,并且 2×2 的矩阵会连乘多次,如果能追踪到这种连乘,那就比较好处理错误。
import pysnooperimport 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 xmulti_matmul(3)对于 NumPy,该工具确实能追踪所有可疑变量的变化过程。当然在实际运算中,矩阵乘法的维度会非常大,我们可以直接追踪形状(Shape),而不是具体的值。
python 是咋debug的

加个装饰器,立刻告别print 函数,拯救发际线。
快点个赞,拯救更多人的秀发
毕业季福利
原价800元的Python入门课程
现在限时免费!没有任何要求,直接领取就可以!
python 是咋debug的

任何疑问,教师团队随时解答
虽然是免费课,但教师团队可没有缩水,依旧是BAT高级专家配合顶级高校硕士进行教学。
python 是咋debug的

立刻微信搜索公众号“七月在线实验室”回复“Python”开始学习
划分为授课时间以及自由提问答疑阶段,每节课都特意留下练习题,让大家去实践,以此辅助大家去消化所学知识。
我们始终相信,只听不用,一辈子也学不会,只有手把手协助大家去实践,才能真的学会东西。
每天更新干货,帮你踏入AI领域成为技术leader。
应届生学员转行拿到52万年薪,大量学员转行后拿到30-40万年薪!
讲师均由各大公司技术leader和国内外顶级高校博士组成!


推荐阅读