python调试利器pysnooper

安装

安装方法很简单,可以使用 pip 或 anaconda 两种安装方法:

$ pip install pysnooper

或者

$ conda install -c conda-forge pysnooper

监控整个函数

一个使用例子如下,首先是需要导入 pysnooper ,然后想知道函数 number_to_bits() 的运行情况,只需要添加 @pysnooper.snoop() 即可。


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

number_to_bits(6)

输出结果

Starting var:.. number = 6
14:52:10.169804 call         4 def number_to_bits(number):
14:52:10.169899 line         5     if number:
14:52:10.169923 line         6         bits = []
New var:....... bits = []
14:52:10.169940 line         7         while number:
14:52:10.169963 line         8             number, remainder = divmod(number, 2)
Modified var:.. number = 3
New var:....... remainder = 0
14:52:10.169981 line         9             bits.insert(0, remainder)
Modified var:.. bits = [0]
14:52:10.170006 line         7         while number:
14:52:10.170028 line         8             number, remainder = divmod(number, 2)
Modified var:.. number = 1
Modified var:.. remainder = 1
14:52:10.170045 line         9             bits.insert(0, remainder)
Modified var:.. bits = [1, 0]
14:52:10.170068 line         7         while number:
14:52:10.170088 line         8             number, remainder = divmod(number, 2)
Modified var:.. number = 0
14:52:10.170104 line         9             bits.insert(0, remainder)
Modified var:.. bits = [1, 1, 0]
14:52:10.170124 line         7         while number:
14:52:10.170143 line        10         return bits
14:52:10.170159 return      10         return bits
Return value:.. [1, 1, 0]

监控函数一部分

通过使用with 将想要监控的部分包含起来

import pysnooper
import random

def foo():
    lst = []
    for i in range(10):
        lst.append(random.randrange(1, 1000))

    with pysnooper.snoop():
        lower = min(lst)
        upper = max(lst)
        mid = (lower + upper) / 2
        print(lower, mid, upper)

foo()

输出为

New var:....... lst = [166, 196, 138, 683, 176, 265, 838, 597, 105, 407]
New var:....... i = 9
14:55:33.853343 line        10         lower = min(lst)
New var:....... lower = 105
14:55:33.853460 line        11         upper = max(lst)
New var:....... upper = 838
105 471.5 838
14:55:33.853492 line        12         mid = (lower + upper) / 2
New var:....... mid = 471.5
14:55:33.853520 line        13         print(lower, mid, upper)

其他使用技巧

重定向到文件, 在文件中查看

@pysnooper.snoop('/my/log/file.log')

监控函数外变量

@pysnooper.snoop(watch=('number','number1'))
def number_to_bits():
    global number
    if number:

查看list或者dict等引用的每个元素的值的变化(默认只显示整个对象的变化,不会针对每个元素的变化提示)

@pysnooper.snoop(watch_explode=('bits','bits1'))

跟踪的函数深度,默认为1,只跟踪当前函数的变量的变化

@pysnooper.snoop(depth=2)

在跟踪日志前面加前缀, 方便跟自己的日志进行区分

@pysnooper.snoop(prefix='ZZZ ')
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值