DeBug Python 代码的方式有很多种?比如:

(1)设置断点

(2)print函数

(3)。。。

本文要介绍的是一个新开源的项目PySnooper ,只要给有疑问的代码加上装饰器,各种信息一目了然,找出错误也就非常简单。

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

极简DeBug工具PySnooper

一般情况下,想要知道哪一行代码在运行、哪一行不运行、本地变量的值是多少时,大部分人会使用 print 函数,在关键部分打印某个或某组变量的值、形状、类型等信息。

而 PySnooper 让你能快速地获得这些信息,且相比之下它不需要细致地写 print 函数,只需要向感兴趣的函数增加一个装饰器就行了。我们会得到该函数的详细 log,包含哪行代码能运行、什么时候运行以及本地变量变化的确切时间。

相比于其他代码智能工具,PySnooper 为何如此优秀?因为不需要任何设置,你就可以在劣等、不规则的企业代码库上使用 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]

@pysnooper.snoop('F:/GitRepository/Python/PySnooper-Test/logs/file.log', prefix='ZZZ || ')

def number_to_bits2(number):

if number:

bits = []

while number:

number, remainder = divmod(number, 2)

bits.insert(0, remainder)

return bits

else:

return [0]

number_to_bits(6)

number_to_bits2(8)

该函数返回的日志如下,我们可以看到在调用 number_to_bits 函数时,赋予参数 number 的初始值为 6, 接着,PySnooper 就对着源代码一行行分析了。

使用PySnooper的正确姿势

首先使用 pip 安装包:

pip install pysnooper

然后,在使用时,import这个pysnooper就好。通过查看snoop函数的定义,很容易得出以下的使用心得:

1.如果标准错误输出难以获得,或者太长了,那么可以将输出定位到本地文件:

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

2.查看一些非本地变量的值:

@pysnooper.snoop(variables=('foo.bar', 'self.whatever'))

3.展示我们函数中调用函数的 snoop 行:

@pysnooper.snoop(depth=2)

4.将所有 snoop 行以某个前缀开始,更容易定位和找到:

@pysnooper.snoop(prefix='ZZZ ')

python debug工具_极简Python DeBug工具——PySnooper相关推荐

  1. python 打包 太大 精简_极简 Python 打包指南

    本文由 qbit 整理自<pytest 测试实战·附录D 打包和发布 Python 项目>·Brian Okken 著·华中科技大学出版社 qbit 的实验环境 Windows 10 x6 ...

  2. python 分类变量回归_极简Python带你探索分类与回归的奥秘

    为何使用人工智能和机器学习? 地球的未来在于人工智能和机器学习.如果对这些技术一无所知,人们很快会发现自己落伍了.世界发展日新月异,每天都发生着不可思议的变化.在人工智能和机器学习中,有许多实现和技术 ...

  3. 手机查看python代码_30个极简Python代码,拿走即用

    字符元素组成判定 检查两个字符串的组成元素是不是一样的. fromcollections importCounterdefanagram(first, second):returnCounter(fi ...

  4. itext word模板替换_【极简Python 自动化办公】Python写入Word文档

    [极简Python 自动化办公]专栏是介绍如何利用python办公,减少工作负荷.篇幅精炼,内容易懂,无论是否有编程基础,都非常适合. 在上次文章中,我们学习了[用python写入excel],这次我 ...

  5. lisp对excel其他行列写入_【极简Python 自动化办公】Python写入Excel表格

    [极简Python 自动化办公]Python写入Excel表格 [极简Python 自动化办公]专栏是介绍如何利用python办公,减少工作负荷.篇幅精炼,内容易懂,无论是否有编程基础,都非常适合. ...

  6. 你好Python -- 极简Python教程

    你好Python -- 极简Python教程 本教程针对Python业余爱好者,展示入门级的编程知识. 目录 你好Python -- 极简Python教程 一. 你好Python! 二. 我想对Pyt ...

  7. 包管理工具conda极简教程

    包管理工具conda极简教程 conda的作用 Anaconda是目前非常流行的一个python包管理器,自带很多流行的python库,包括numpy,pandas等,当然还有conda.而Conda ...

  8. 30 段极简 Python 代码:这些小技巧你都 Get 了么?

    选自 | towardsdatascienc 编译 | 机器之心 学 Python 怎样才最快,当然是实战各种小项目,只有自己去想与写,才记得住规则.本文是 30 个极简任务,初学者可以尝试着自己实现 ...

  9. 30段极简Python代码:这些小技巧你都Get了么(附代码链接)

    来源:机器之心 本文约3200字,建议阅读8分钟. 本文带你了解30个极简任务,它们都是平常非常实用的技巧,我们只要花几分钟就能从头到尾浏览一遍. 学 Python 怎样才最快,当然是实战各种小项目, ...

最新文章

  1. ubuntu 目录结构
  2. 安装软件包的三种方法、rpm包介绍、rpm工具用法、yum工具用法、yum搭建本地仓库...
  3. java 8 什么软件_Java 8你了解多少呢?Java之被人遗忘的Java 8的八个功能
  4. 学生用计算机2ndf,手机计算器2ndf键在哪 等同于INV键
  5. java 中的2个接口 Comparable和Comparator
  6. Reverse-engineer Source Code into UML Diagrams
  7. [PAT乙级]1042 字符统计
  8. Spring 4中@ControllerAdvice的改进
  9. elasticsearch亿级数据量全量索引导入优化方案
  10. Linux学习之VMware安装Linux
  11. c语言组json包,json格式解析和libjson的用法介绍(关于cjson的使用方法)
  12. 如何拍好运动风人像?
  13. .net core 填坑记之—格式转换问题
  14. sharepoint2010无法创建网站集
  15. 5.Hbase API 操作开发
  16. Java面试应该准备的知识点系列一
  17. python 的request包使用介绍,以one two three zero six为例
  18. SQL语句的各种连接查询
  19. UG10.0塑胶模具设计从入门到精通全套视频教程500讲
  20. pr剪辑视频转码问题以及子剪辑

热门文章

  1. java 如何捕获线程中的异常处理_如何捕获Java中另一个线程抛出的异常?
  2. 一个SpringBoot项目,开发业务前至少应该引入哪些配置?
  3. 这是我见过最通俗易懂的单例模式讲解了!
  4. 定义与声明c语言,c语言定义与声明.ppt
  5. Spring框架----Spring的bean注解
  6. [转载]C# MemoryStream(内存流)
  7. 案例:对比使用Java代码与EL表达式获取信息
  8. android 颜色反转 api,来自Android camera2 API的图像数据在Galaxy S5上翻转和压缩
  9. linux进程线程协程的区别,进程和线程、协程的区别
  10. 服务器物理内存只增不降,服务器内存不断增加