PySnooper在GitHub上自嘲是一个“乞丐版“调试工具(穷人的调试器)。
一般情况下,在编写Python代码时,如果想弄清楚为什么Python代码没有按照预期执行,哪些代码在运行哪些没在运行,局部变量又是什么,我们会使用包含断点和观察模式等功能的调试器,或者直接使用打印语句打印出来。
但上面的方法都比较麻烦,例如使用调试器需要进行繁琐的设置,使用打印打印也要很仔细。与它们相比,使用PySnooper只需为要调试的函数添加一个装饰器即可,这样就能获得运行函数详细的日志,包括执行的代码行和执行时间,以及局部变量发生变化的确切时间。
之所以称为“乞丐版”,相信是因为PySnooper使用起来十分简单,开发者可以在任何庞大的代码库中使用它,而无需进行任何设置。只需添加装饰器,并为日志输出地址指定路径。
GitHub项目地址
安装
pip3安装pysnooper
进口pysnooper @pysnooper.snoop () def number_to_bits(数量): 如果数量: 位=[] 而数量: 数,剩余=divmod(数量2) 位。插入(0,余数) 返回位 其他: 返回[0] number_to_bits (6) >之前返回日志如下
开始var: . .数量=6
引用>
21:14:32.099769 call ,,,,,,,3 @pysnooper.snoop ()
21:14:32.099769 line ,,,,,,,5,,,,如果数量:
21:14:32.099769 line ,,,,,,,6,,,,,,,,位=[]
新var: .......位=[]
21:14:32.099769 line ,,,,,,,7,,,,,,,,而数量:
21:14:32.099769 line ,,,,,,,8日,,,,,,,,,,,,数,剩余=divmod(号码,2)
新var: .......剩余=0
修改var: . .数量=3
21:14:32.099769 line ,,,,,,,9日,,,,,,,,,,,,位。插入(0,余数)
修改var: . .位=[0]
21:14:32.099769 line ,,,,,,,7,,,,,,,,而数量:
21:14:32.099769 line ,,,,,,,8日,,,,,,,,,,,,数,剩余=divmod(号码,2)
修改var: . .数量=1
修改var: . .剩余=1
21:14:32.099769 line ,,,,,,,9日,,,,,,,,,,,,位。插入(0,余数)
修改var: . .位=(1,0)
21:14:32.099769 line ,,,,,,,7,,,,,,,,而数量:
21:14:32.099769 line ,,,,,,,8日,,,,,,,,,,,,数,剩余=divmod(号码,2)
修改var: . .数量=0
21:14:32.099769 line ,,,,,,,9日,,,,,,,,,,,,位。插入(0,余数)
修改var: . .位=[1 1 0]
21:14:32.099769 line ,,,,,,,7,,,,,,,,而数量:
21:14:32.099769 line ,,,,,,10个,,,,,,,,返回位
21:14:32.099769 return ,,,,10个,,,,,,,,返回位
如果标准错误输出难以获得,或者太长了,那么可以将输出定位到本地文件:
@pysnooper.snoop(“/我的/日志/file.log”)查看一些非本地变量的值:
@pysnooper.snoop(变量=(foo。酒吧,self.whatever)展示我们函数中调用函数的snoop行:
@pysnooper.snoop(深度=2)将所有snoop行以某个前缀开始,更容易定位和找到:
@pysnooper。爱管闲事的人(前缀=打鼾声)>之前更可以用来获取TensorFlow的各种张量信息,十分强大。妈妈再也不用担心我找不到错误啦!
(2019.5.7更新:有时会不起作用,不知是自己姿势不对还是其他原因)。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
详解调试Python神级工具PySnooper