详解调试Python神级工具PySnooper

  

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