0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

PySnooper:替代print的重复性工作

科技绿洲 来源:Python实用宝典 作者:Python实用宝典 2023-10-30 10:41 次阅读

PySnooper 是一个非常方便的调试器。如果您正在试图弄清楚为什么您的Python代码没有按照您的预期去做,您会希望使用具有断点和监视功能的成熟Debug工具,但是许多Debug工具配置起来非常麻烦。

现在,有了PySnooper,您并不需要配置那么复杂的Debug工具,就能够完成对整个代码的分析。它能告诉您哪些代码正在运行,以及局部变量的值是什么。

其实,PySnooper 就是替代了一行一行print的重复性工作,给你的代码一个pysnooper装饰器,它能自动识别到语句和变量并将其值print出来:

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)

效果如下:

Source path:... 1.py
Starting var:.. number = 6
23:03:35.990701 call         4 def number_to_bits(number):
23:03:35.991699 line 5     if number:
23:03:35.991699 line 6         bits = []
New var:....... bits = []
23:03:35.991699 line 7         while number:
23:03:35.991699 line 8             number, remainder = divmod(number, 2)
Modified var:.. number = 3
New var:....... remainder = 0
23:03:35.991699 line 9             bits.insert(0, remainder)
Modified var:.. bits = [0]
23:03:36.004664 line 7         while number:
23:03:36.005661 line 8             number, remainder = divmod(number, 2)
Modified var:.. number = 1
Modified var:.. remainder = 1
23:03:36.005661 line 9             bits.insert(0, remainder)
Modified var:.. bits = [1, 0]
23:03:36.007657 line 7         while number:
23:03:36.007657 line 8             number, remainder = divmod(number, 2)
Modified var:.. number = 0
23:03:36.008655 line 9             bits.insert(0, remainder)
Modified var:.. bits = [1, 1, 0]
23:03:36.008655 line 7         while number:
23:03:36.009651 line 10         return bits
23:03:36.009651 return      10         return bits
Return value:.. [1, 1, 0]
Elapsed time: 00:00:00.020945

可以看到,它将每一行变量的值都输出到屏幕上,方便你调试代码。

仅仅需要写一行代码—使用装饰器就可以实现这个方便的调试功能,比起一行行写print,这可方便多了。

0.安装模块

使用这个模块,你只需要使用Pip安装PySnooper:

pip install pysnooper

接下来讲讲这个模块其他好用的功能:

1.支持日志文件

如果你觉得print到屏幕上不方便,还可以将其输出到log文件中,你只需要将装饰器那一行改为:

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

2.读取局外变量或其他表达式

如果你想读取在装饰器作用范围以外的变量或者表达式的值,还可以使用watch参数

@pysnooper.snoop(watch=('foo.bar', 'self.x["whatever"]'))

3.上下文形式的调试

没错,装饰器有限定的使用条件,使用起来比较局限,因此pysnooper还支持使用 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:....... i = 9
New var:....... lst = [681, 267, 74, 832, 284, 678, ...]
09:37:35.881721 line 10         lower = min(lst)
New var:....... lower = 74
09:37:35.882137 line 11         upper = max(lst)
New var:....... upper = 832
09:37:35.882304 line 12         mid = (lower + upper) / 2
74 453.0 832
New var:....... mid = 453.0
09:37:35.882486 line 13         print(lower, mid, upper)
Elapsed time: 00:00:00.000344

当我们只需要调试部分代码的时候,这个上下文形式的调试方法非常方便。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 代码
    +关注

    关注

    30

    文章

    4555

    浏览量

    66771
  • python
    +关注

    关注

    51

    文章

    4675

    浏览量

    83467
  • DEBUG
    +关注

    关注

    3

    文章

    83

    浏览量

    19446
收藏 人收藏

    评论

    相关推荐

    测量系统分析:测量系统的的重复性和重现性

    测量系统分析:测量系统的的重复性和重现性
    发表于 08-16 13:44

    PGA-SAR系统无法达到12比特级别的可重复性时,Δ-Σ系统会怎么样呢?

    PGA-SAR系统如何才能达到12比特可重复性性能?PGA-SAR系统无法达到12比特级别的可重复性时,Δ-Σ系统会怎么样呢?Δ-Σ转换器的过程增益如何?
    发表于 04-07 06:34

    测量系统的的重复性和重现性

    测量系统的的重复性和重现性:在MSA中的相当重要的一部分是研究测量系统的重复性(Repeatability)和重现性(Reproducibility). 在六个西格玛的方法论中, 也是每个项目都必须要完成的工作.
    发表于 08-16 13:14 17次下载

    相控阵探头的重复性与可靠性

    相控阵探头的重复性与可靠性 Over the past few years, new procedures involving phased array technology were
    发表于 03-20 10:45 24次下载

    选转换器?考虑下时序、精确度和可重复性以外的参考

    在您决定哪种转换器最为适合于您的应用时,您可能会首先想到速度、精确度以及未来系统的可重复性。好吧,这都没问题,但请不要局限于这些显而易见的东西。
    发表于 03-06 10:04 620次阅读

    并行传感器如何提高倾斜测量的精度和可重复性

    并行传感器如何提高倾斜测量的精度和可重复性?具体的跟随小编通过本文来详细的了解下。
    的头像 发表于 07-11 13:27 3124次阅读

    为什么水分测定仪的测定结果重复性差?以及哪些样品不适合测量

    1、水分测定仪的测定结果重复性差的主要原因以及措施?
    发表于 03-29 17:22 2667次阅读

    机器人技术的可重复性和准确性分析

    工业机器人具有许多度量或可测量的特征,这将直接影响机器人在执行任务期间的效率。可测量特性主要指的是可重复性和准确性。
    发表于 09-17 14:47 2335次阅读
    机器人技术的可<b class='flag-5'>重复性</b>和准确性分析

    计量标准重复性的测量方法

    计量标准的重复性规定用测量结果的分散性来定量地表示,即用单次测量结果yi的实验标准差s(yi)来表示。当测量结果由单次测量得到时,它直接就是由重复性引入的不确定度分量。
    的头像 发表于 11-12 14:19 1.7w次阅读

    流量计重复性差的解决方法

    在实际使用过程中,流量计常会出现重复性差的问题,困惑了不少现场工程师。经过现场观察和总结,发现流量计和体积管内有气体,系统的压力、温度、流量不稳定,四通阀转换密封不合适,计量球的圆度和尺寸等情况都会
    发表于 01-05 11:37 1226次阅读

    计量标准的重复性考核要求

    计量标准的重复性规定用测量结果的分散性来定量地表示,即用单次测量结果yi的实验标准差s(yi)来表示。当测量结果由单次测量得到时,它直接就是由重复性引入的不确定度分量。当
    的头像 发表于 03-18 10:21 2481次阅读

    在Verilog中利用函数将重复性的行为级设计进行提取

    在 Verilog 中,可以利用任务(关键字为 task)或函数(关键字为 function),将重复性的行为级设计进行提取,并在多个地方调用,来避免重复代码的多次编写,使代码更加的简洁、易懂。
    的头像 发表于 06-02 11:39 861次阅读
    在Verilog中利用函数将<b class='flag-5'>重复性</b>的行为级设计进行提取

    计量标准的重复性考核要求

    在进行重复性测量时,相同的测量程序,相同的观测者,使用相同的仪器,以及相同地点等要求一般均能得到满足而不会有任何问题。关键是如何理解“在相同的条件下”以及“在短时间内重复测量”这两条要求。
    的头像 发表于 07-19 15:52 753次阅读
    计量标准的<b class='flag-5'>重复性</b>考核要求

    PySnooper :一个非常方便的调试器

    麻烦。 现在,有了PySnooper,您并不需要配置那么复杂的Debug工具,就能够完成对整个代码的分析。它能告诉您哪些代码正在运行,以及局部变量的值是什么。 其实,PySnooper 就是替代了一行一行
    的头像 发表于 10-17 17:12 235次阅读
    <b class='flag-5'>PySnooper</b> :一个非常方便的调试器

    PySnooper:一个非常方便的调试器

    麻烦。 现在,有了PySnooper,您并不需要配置那么复杂的Debug工具,就能够完成对整个代码的分析。它能告诉您哪些代码正在运行,以及局部变量的值是什么。 其实,PySnooper 就是替代了一行一行
    的头像 发表于 10-31 11:16 201次阅读