ITPub博客

首页 > 人工智能 > 自然语言 > Python调试工具 PySnooper

Python调试工具 PySnooper

自然语言 作者:小咖啡111 时间:2019-05-10 10:18:39 0 删除 编辑

(来源:Python编程)

一般情况下,在编写 Python 代码时,如果想弄清楚为什么 Python 代码没有按照预期执行的原因,比如你想知道哪些是正在运行,哪些没有运行,以及局部变量的值是什么...通常我们会使用包含断点和观察模式等功能成熟的调试器,或者直接使用 print 语句打印出来。


今天,猿妹和大家分享一个“贫民版”调试工具—— PySnooper


PySnooper允许你执行以上相同的操作,只需为要调试的函数添加一个装饰器即可,而不需要构建正确的 print 打印。 你还将得到函数的详细日志,包括运行了哪些代码行、何时运行以及何时更改了局部变量。


PySnooper 使用起来十分简单,开发者可以在任何庞大的代码库中使用它,而无需进行任何设置。 你只需添加装饰器,并为日志输出地址指定路径,方法是将其路径指定为第一个参数。



目前, PySnooper 在GitHub上已经获得  7047  个Star, 371  个Fork(GitHub地址: https://github.com/cool-RR/PySnooper )



示例


以下编写了一个函数,通过返回一个二进制列表。 我们只需要通过添加@pysnooper.snoop()装饰器就可以了:




import

 pysnooper


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

number_to_bits( 6 )


输出如下:



Starting var:.. number = 6

15:29:11.327032  call           4   def  number_to_bits( number ):
15 : 29 : 11.327032  line          5       if   number :
15 : 29 : 11.327032  line          6          bits = []
New   var :....... bits = []
15 : 29 : 11.327032  line          7           while   number :
15 : 29 : 11.327032  line          8               number ,  remainder  = divmod( number ,  2 )
New   var :.......  remainder  = 
Modified  var :..  number  =  3
15 : 29 : 11.327032  line          9              bits.insert( ,  remainder )
Modified  var :.. bits = [ ]
15 : 29 : 11.327032  line          7           while   number :
15 : 29 : 11.327032  line          8               number ,  remainder  = divmod( number ,  2 )
Modified  var :..  number  =  1
Modified  var :..  remainder  =  1
15 : 29 : 11.327032  line          9              bits.insert( ,  remainder )
Modified  var :.. bits = [ 1 ,  ]
15 : 29 : 11.327032  line          7           while   number :
15 : 29 : 11.327032  line          8               number ,  remainder  = divmod( number ,  2 )
Modified  var :..  number  = 
15 : 29 : 11.327032  line          9              bits.insert( ,  remainder )
Modified  var :.. bits = [ 1 ,  1 ,  ]
15 : 29 : 11.327032  line          7           while   number :
15 : 29 : 11.327032  line         10           return  bits
15 : 29 : 11.327032   return        10           return  bits
Return   value :.. [ 1 ,  1 ,  ]



特性


stderr,则可以将选择输出到指定文件:



@

pysnooper

.

snoop

('/

my

/

log

/

file

.

log

')


查看一些非局部变量的变量值:



@

pysnooper

.

snoop

(

variables

=('

foo

.

bar

', 

'self.whatever'

))


显示函数调用的函数的snoop行:


@pysnooper.snoop(depth=2)


Python学习交流群:519489681  备注:小白


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31560357/viewspace-2643885/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2018-10-31

  • 博文量
    66
  • 访问量
    77431