GitHub 热门:别再用 print 输出来调试代码了

4 月 23 日,GitHub 每日趋势榜第一位是一个 Python ,相关项目:PySnooper。

该项目很快获取 2200 Star。

PySnooper 是个什么东西?

如果你写的 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)

输出范例

Starting var:.. number = 6
21:14:32.099769 call     3 @pysnooper.snoop()
21:14:32.099769 line     5   if number:
21:14:32.099769 line     6     bits = []
New var:....... bits = []
21:14:32.099769 line     7     while number:
21:14:32.099769 line     8       number, remainder = divmod(number, 2)
New var:....... remainder = 0
Modified var:.. number = 3
21:14:32.099769 line     9       bits.insert(0, remainder)
Modified var:.. bits = [0]
21:14:32.099769 line     7     while number:
21:14:32.099769 line     8       number, remainder = divmod(number, 2)
Modified var:.. number = 1
Modified var:.. remainder = 1
21:14:32.099769 line     9       bits.insert(0, remainder)
Modified var:.. bits = [1, 0]
21:14:32.099769 line     7     while number:
21:14:32.099769 line     8       number, remainder = divmod(number, 2)
Modified var:.. number = 0
21:14:32.099769 line     9       bits.insert(0, remainder)
Modified var:.. bits = [1, 1, 0]
21:14:32.099769 line     7     while number:
21:14:32.099769 line    10     return bits
21:14:32.099769 return   10     return bits

有兴趣的童鞋,请收藏:

https://github.com/cool-RR/PySnooper

好了,本文就给大家介绍到这里,希望对大家有所帮助!

(0)

相关推荐

  • 对python-3-print重定向输出的几种方法总结

    方法1: import sys f=open('test.txt','a+') a='123' b='456' print >> f,a,b f.close() 方法2: import sys f=open('a.txt','w') old=sys.stdout #将当前系统输出储存到临时变量 sys.stdout=f #输出重定向到文件 print 'Hello World!' #测试一个打印输出 sys.stdout=old #还原系统输出 f.close() print open('a.

  • python中使用print输出中文的方法

    看Python简明教程,学习使用print打印字符串,试了下打印中文,不行. 编辑环境:IDLE 上网搜了下解决办法,各种说法,试了两种: print u"学习" print (unicode("学习", encoding="utf-8")) 保存时均还是会提示 shell输出: ѧϰ ѧϰ 说明第二种还是有编码但还是不对. 最后,加上最前面一行就好了,虽然现在还不明白第一行为什么,不是说#是注释么... # encoding: utf-8

  • python 将print输出的内容保存到txt文件中

    具体代码如下所示: import sys import os class Logger(object): def __init__(self, filename="Default.log"): self.terminal = sys.stdout self.log = open(filename, "a") def write(self, message): self.terminal.write(message) self.log.write(message) d

  • vue项目实现github在线预览功能

    最近在使用 vue-cli 脚手架工具构建自己的第一个 vue 项目,有点小激动,想把它上传到 github 并展示一下预览效果,结果踩了好多坑,折腾了大半天才弄好. 这里假设你也是和我一样使用了 vue-cli 搭建了自己的项目,并且项目也已经上传到了 github 问题1 当我们在命令行执行 npm run build 后,项目的目录下会生成一个 dist 文件夹,它里面又包含一个 static 文件夹和一个 index.html 文件,这是 webpack 最终打包好的文件 我们先尝试在浏

  • 在Python中Dataframe通过print输出多行时显示省略号的实例

    笔者使用Python进行数据分析时,通过print输出Dataframe中的数据,当Dataframe行数很多时,中间部分显示省略号,如下图所示: 0 项华祥 1 何炅 2 张艺飞 3 李仁港 4 崔龄燕 5 董春泽 6 邓超.俞白眉 7 叶伟信,邹凯光 8 肖洋 ... 57 刘镇伟 58 周拓如 59 陆剑青.梁乐民 60 陈木胜 61 李仁港 62 许安.杨龙澄 63 吴天明 64 李骏 65 申太罗 66 吕寅荣.亚历山德罗·卡罗尼 67 罗兰·艾默里奇 68 布莱恩·辛格 69 安东尼

  • 2018年GitHub账户注册图文教程(github从注册到使用)

    GitHub是一个优秀的面向开源及私有软件项目的托管平台,值得我们使用,但因为其不同于我们常见的很多平台,所以刚开始使用时,我们会遇到很多的问题.特此记录下博主自己使用GitHub的过程供自己以后查看,顺便可以给其他要使用GitHub但又不知道怎么使用的人一点指导,若发现不合理之处,欢迎指正. Github是最流行的代码库,里面存储着丰富的优秀的开源代码.不仅如此,作为一款免费的代码存储利器也是流的一逼,支持各种编程语言,代码显示效果堪称完美,可以随时随地查看自己记录的笔记.... 好处是太多太

  • python中实现将多个print输出合成一个数组

    比如有下面一段代码: for i in range(10): print ("%s" % (f_list[i].name)) 该代码段的执行,会生成如下的10行"name"属性的字符串 f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 如果我们将上述代码段修改如下: for i in range(10): print ("\"%s\"," % (f_list[i].name)), 代码的执行结果就变成下面的样子:

  • GitHub 热门:别再用 print 输出来调试代码了

    4 月 23 日,GitHub 每日趋势榜第一位是一个 Python ,相关项目:PySnooper. 该项目很快获取 2200 Star. PySnooper 是个什么东西? 如果你写的 Python 代码不能按如期那样运行,你会绞尽脑汁想为啥出错了.虽然你希望有支持断点的成熟调试器,但或许你现在不想去设置这样的调试器. 你想知道哪些行代码是正常运行,哪些行不正常.据说大多数人会在可疑位置使用 print 输出语句. 其实 PySnooper 的作用有点类似,你不用小心谨慎地用 print 输

  • Python编程不要再使用print调试代码了

    目录 1. 快速安装 2. 简单案例 3. 详细使用 3.1 重定向到日志文件 3.2 跟踪非局部变量值 3.3 设置跟踪函数的深度 3.4 设置调试日志的前缀 3.5 设置最大的输出长度 3.6 支持多线程调试模式 3.7 自定义对象的格式输出 给大家推荐本我自己写的电子书<PyCharm中文指南>,把各种 PyCharm 的高效的使用技巧用GIF动态图的形式展示出来.有兴趣的可以看它的在线文档: http://pycharm.iswbm.com 对于每个程序开发者来说,调试几乎是必备技能.

  • 解决Python print 输出文本显示 gbk 编码错误问题

    前阵子想爬点东西,结果一直提示错误UnicodeEncodeError: 'gbk' codec can't encode character '\xa0' in position,在网上一查,发现是 Windows 的控制台的问题.控制台的编码是 GBK,Python 是 UTF-8,造成了冲突.下面给出三种解决方法. 第一种方法:直接替换出错的内容 import requests url = 'https://blog.csdn.net/jianhong1990/article/detail

  • 解决vscode python print 输出窗口中文乱码的问题

    一.搭建 python 环境 在 VSC 中点击 F1 键,弹出控制台,输入 ext install 界面左侧弹出扩展窗格,输入python,确认,开始搜索 下载发布者为Don Jayamanne 的 Python 插件 (下载过程中不要切换窗口,不要做其他任何操作,否则会中断下载,下载时间略长,耐心等待) 安装完毕 "文件"-"首选项"-"用户设置",打开用户配置文件settings.json,再其中大括号内输入计算机中 python.exe

  • tensorflow实现在函数中用tf.Print输出中间值

    tensorflow由于其基于静态图的模式,导致写代码的时候很难调试,除了用官方的调试工具外,最直接的方法就是把中间结果输出出来查看,然而,直接用print函数只能输出tensor变量的形状,而不是数值,想要输出tensor的具体数值需要用tf.Print函数.网上有很多关于这个函数使用方法的说明,这里简要介绍: Print( input_, data, message=None, first_n=None, summarize=None, name=None ) 参数: input_:通过这个

  • pycharm实现print输出保存到txt文件

    程序比较大,运行时间又长的时候,不想等着结果,只要先确保程序功能正确无误,可以把需要的结果print然后保存到TXT文件中,超级方便 # 创建一个txt文件,文件名为mytxtfile def text_create(name): desktop_path = "C:\\Users\\Administrator\\PycharmProjects\\EmotionRecog\\venv\\Scripts\\src\\mylog\\" # 新创建的txt文件的存放路径 full_path

  • Java实现读取键盘输入保存到txt文件,再统计并输出每个单词出现次数的方法

    本文实例讲述了Java实现读取键盘输入保存到txt文件,再统计并输出每个单词出现次数的方法.分享给大家供大家参考,具体如下: package javatest; import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileReader; import java.io.IOEx

  • python中的print()输出

    1.普通的输出: print(str)#str是任意一个字符串,数字··· 2.格式化输出: print('1,2,%s,%d'%('asd',4)) 1,2,asd,4 与C语言有点类似 3.其它: >>> pi = 3.141592653 >>> print('%10.3f' % pi) #字段宽10,精度3 3.142 >>> print("pi = %.*f" % (3,pi)) #用*从后面的元组中读取字段宽度或精度 pi

随机推荐