• 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 实战教程,希望你能在下面点个赞和在看支持我继续创作,谢谢!

  • 相关阅读:
    在VMD上可视化hdf5格式的分子轨迹文件
    阿里巴巴对裁员谣言报警
    shell基本系统维护命令
    折叠旗舰新战局:华为先行,OPPO接棒
    深度解析:用Python爬虫逆向破解dappradar的URL加密参数(最详细逆向实战教程,小白进阶高手之路)
    一个固定 WSL2 ip 的简单方法
    kubernetes集群部署
    BSV 上的 PLONK
    Hibernate/JPA 中的id概述
    Java web程序实现请求后重启服务动作
  • 原文地址:https://blog.csdn.net/weixin_38037405/article/details/127098117