• PySnooper – 永远不要使用print进行调试


    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)
    

    效果如下:

    在这里插入图片描述

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

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

    1.准备

    请选择以下任一种方式输入命令安装依赖
    1. Windows 环境 打开 Cmd (开始-运行-CMD)。
    2. MacOS 环境 打开 Terminal (command+空格输入Terminal)。
    3. 如果你用的是 VSCode编辑器 或 Pycharm,可以直接使用界面下方的Terminal.

    pip install pysnooper
    

    除了文章开头提到的基本使用方法,这个模块还有其他好用的功能。

    2.功能

    基本使用方法,在你的函数上加一个 pysnooper 装饰器:

    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)
    

    效果如下:

    在这里插入图片描述

    2.1 支持日志文件

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

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

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

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

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

    2.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()
    

    效果如下,只有上下文里的代码才会被调试出来:

    在这里插入图片描述

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

    此外,PySnooper还有许多更强大的用法,大家可以看他们的高级使用文档:

    https://github.com/cool-RR/PySnooper/blob/master/ADVANCED_USAGE.md

    我们的文章到此就结束啦,原创不易,如果你喜欢今天的Python 实战教程,希望你能在下面点个赞和在看支持我继续创作,谢谢!

  • 相关阅读:
    LeetCode283. 移动零
    设计模式之状态模式
    MySQL高级3-索引的结构和分类
    一百七十四、Hive——Hive动态分区表加载数据时需不需要指定分区名?
    广电行业没落了吗?生成式人工智能(AIGC)媒体应用标准联盟发布,超清化、移动化和智能化是发展趋势
    给 Linux0.11 添加网络通信功能 (Day2: 寻找一个可以 follow 的,简易网卡驱动教程)
    小米蓝牙耳机怎么选?适合小米手机的蓝牙耳机推荐
    室友面上阿里,把这些笔记扔给了我:Roket/Rabbit/Kafka,狠虐菜鸡
    教你2种方法,将iOS设备通过MQTT协议连接到华为云物联网平台
    Dubbo3应用开发—Dubbo服务管理平台DubboAdmin介绍、安装、测试
  • 原文地址:https://blog.csdn.net/weixin_38037405/article/details/127098117