还在使用print输出日志吗?

PySnooper

hello,小伙们大家好,今天是给大家分享的开源项目是帮助Python开发者的debug工具,如果您正在尝试弄清楚为什么您的Python代码没有按照您认为的那样做。您可能希望使用具有断点和监视功能的成熟调试器,但现在不必为设置一个调试器而烦恼。

您想知道哪些行正在运行,哪些不在,以及局部变量的值是什么。

大多数人会print在战略位置使用线条,其中一些线条显示变量的值。

PySnooper允许您执行相同的操作,除了print只需要在感兴趣的函数中添加一条装饰器行,而不是精心制作正确的行。您将获得函数的逐个播放日志,包括运行了哪些行何时以及何时准确更改局部变量。

是什么让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)
Source path:... /my_code/foo.py
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 = 0
Modified var:.. number = 3
15:29:11.327032 line         9             bits.insert(0, remainder)
Modified var:.. bits = [0]
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(0, remainder)
Modified var:.. bits = [1, 0]
15:29:11.327032 line         7         while number:
15:29:11.327032 line         8             number, remainder = divmod(number, 2)
Modified var:.. number = 0
15:29:11.327032 line         9             bits.insert(0, remainder)
Modified var:.. bits = [1, 1, 0]
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, 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:....... 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)

安装方法

pip install pysnooper

项目地址:https://github.com/cool-RR/PySnooper

今天的推荐不知道大家喜欢吗?如果你们喜欢话,请在文章底部留言或点赞,以表示对我的支持,你们的留言,点赞,转发关注是我持续更新的动力哦!

关注我的公众号回复:"1024",免费领取一大波学习资源,先到先得哦!

原文地址:https://www.cnblogs.com/zhijieju/p/12702250.html

时间: 2024-11-09 03:44:40

还在使用print输出日志吗?的相关文章

对于Android系统Log输出日志的封装LogUtils

MainActivity如下: package cc.cn.logutil; import android.os.Bundle; import android.app.Activity; /** * Demo描述: * 对于Android系统Log输出日志的封装LogUtils * 1 可修改LogUtils中的LEVEL值觉得哪些级别的日志可以输出. * 所以方便选择性输出日志或者屏蔽日志输出 * 2 输出的日志除了本想输出的信息外还包含了该日志输出时所属 * 的线程,类,方法名,已经在该方法

log4j输出日志乱码(转)

log4j日志文件乱码问题的解决方法 log4j日志文件中文乱码处理方法 log4j 控制台和文件输出乱码问题解决 写在前面,第三篇文章中将原因解释的最清楚,为什么设置为UTF-8或者GBK就生效了,原因是类文件的编码和输入日志的编码必须一致,否则就会出现乱码. 转:log4j日志文件乱码问题的解决方法 近日在AIX上用log4j打印日志,出现乱码,经过努力解决问题. 症状:在默认语言非中文(或者说默认语言不支持中文的)的Windows.Linux.Unix上,用log4j打印日志,出现乱码,常

iBatis使用log4j2输出日志

原文链接这里 iBatis是一个老项目,2.3.4.726版本发布之后,项目改名为MyBatis,项目主页目前为http://mybatis.github.io/. 我从08年开始接触iBatis,一直使用2.3.4.726版本,直至当前的项目.iBatis恰到好处的满足了项目组在ORM.SQL维护方面的需求,所以也一直懒得换成其它同类开源软件,比如MyBatis. 最近参与新的项目开发,一切都要从零开始.为了节省时间,我直接把原项目中数据库相关操作的代码拿过来使用,发现遇到一个问题.新项目基于

输出日志实例改成用Spring的AOP来实现

1.采用Interception Around通知的形式实现 Interception Around通知会在Join Point的前后执行,实现Interception Around通知的类需要实现接口MethodInterceptor.其实现思路是: 1)首先实现接口MethodInterceptor,在Invoke()方法里编写负责输出日志信息的代码,具体业务逻辑还使用前面的接口TimeBookInterface和它的实现类TimeBook 2)然后在Spring的配置文档中定义PointC

Log4J日志配置详解和自定义log4j日志级别及输出日志到不同文件实现方法

Log4J日志配置详解 一.Log4j简介 Log4j有三个主要的组件:Loggers(记录器),Appenders(输出源)和Layouts(布局).这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出.综合使用这三个组件可以轻松地记录信息的类型和级别,并可以在运行时控制日志输出的样式和位置. 1.Loggers Loggers组件在此系统中被分为五个级别:DEBUG.INFO.WARN.ERROR和FATAL.这五个级别是有顺序的,DEBUG < INFO < WARN <

Android输出日志Log类

android.util.Log常用的方法有以下5个: Log.v() Log.d() Log.i() Log.w() 以及 Log.e().根据首字母分别对应VERBOSE,DEBUG,INFO,WARN,ERROR. 1.Log.v 的调试颜色为黑色的,任何消息都会输出,这里的v代表verbose啰嗦的意思,平时使用就是Log.v("",""); 2.Log.d的输出颜色是蓝色的,仅输出debug调试的意思,但他会输出上层的信息,过滤起来可以通过DDMS的Log

springboot的日志框架slf4j (使用logback输出日志以及使用)

1.为什么使用logback? --在开发中不建议使用System.out因为大量的使用会增加资源的消耗.因为使用System.out是在当前线程执行的,写入文件也是写入完毕之后才继续执行下面的程序.而使用Log工具不但可以控制日志是否输出,怎么输出,它的处理机制也是通知写日志,继续执行后面的代码不必等日志写完. --个人推荐使用SLF4J(Simple Logging Fa?ade For Java)的logback来输出日志,其比log4j效率高.     --Spring Boot 提供了

让Python输出更漂亮---Print 输出

print 默认输出是换行的,如果要实现不换行需要在变量末尾加上 end="": student_age=18 print("学生的年龄为:",student_age) #print("学生的年龄为:"),print(student_age)中间不换行 #print执行完后默认换行 print("hello,world!",end="\n") print("hello,world!",e

记一次项目上线后Log4j2不输出日志的坑

公司项目采用了Log4j2来输出日志,在开发环境和测试环境下均可以输出日志,但在生成环境就没有日志输出.开始毫无头绪,后来通过不断的排查,终于解决了这个问题.在此记录下该问题的解决过程,便于后续查阅. 一.发现问题 p.MsoNormal { margin: 0pt; margin-bottom: .0001pt; text-align: justify; line-height: 125%; font-family: "Times New Roman"; font-size: 12.