同事给我推荐了这个调试神器,一直没工夫看,今天看了下。

原文链接:

史上最方便的Python Debug工具|腾讯技术说

体验了下,感觉最好的用法:1、优先逐行调试;2、一些复杂状态处理或者偶现的bug,可以用这个库调试;感觉并不会颠覆传统的调试手段,只是让添加日志更加便利了而已。

但是同事从后台开发的角度给出了他的看法,
稍微大型的python项目都只有开发的时候才逐行,服务器他们基本都靠日志,只是客户端习惯了debugger的调试。写个桌面程序,debugger很容易,这个服务就没那么简单了,尤其多进程服务,一般py debugger只能靠远程调试的模式。

并发多请求的时候,每个进程挂在不同端口的debugger上,很痛苦的,遇到时序问题,debugger一到介入,连重现都是问题

当习惯了这种logging方式,就像自己写的程序天生有诊断功能一样,后边再用debugger又觉得繁琐了。所以我一直觉着我们日志收集上报做的很好

分析Snooper的用法,你会发现他利用了python装饰器语法,那什么是装饰器呢?

它放在一个函数开始定义的地方,它就像一顶帽子一样戴在这个函数的头上。和这个函数绑定在一起。在我们调用这个函数的时候,第一件事并不是执行这个函数,而是将这个函数做为参数传入它头顶上这顶帽子,这顶帽子我们称之为装饰函数 或 装饰器。

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)

下面的这篇文章讲得挺全的。

一篇文章搞懂装饰器所有用法(建议收藏)

1) 装饰函数内定义具体需要如何处理传入的函数:

# 这是装饰函数
def logger(func):
def wrapper(*args, **kw):
print('我准备开始计算:{} 函数了:'.format(func.__name__)) # 真正执行的是这行。
func(*args, **kw) print('啊哈,我计算完啦。给自己加个鸡腿!!')
return wrappe

2) 业务函数前将装饰器函数带上去:

@logger
def add(x, y):
print('{} + {} = {}'.format(x, y, x+y))

3)调用

add(200, 50)

4) 输出:

我准备开始计算:add 函数了:
200 + 50 = 250
啊哈,我计算完啦。给自己加个鸡腿!

python的debug神器PySnooper的更多相关文章

  1. 极简Python DeBug工具——PySnooper

    DeBug Python 代码的方式有很多种?比如: (1)设置断点 (2)print函数 (3)... 本文要介绍的是一个新开源的项目PySnooper ,只要给有疑问的代码加上装饰器,各种信息一目 ...

  2. Python的DEBUG LOG

    一直在嵌入式行业,熟悉嵌入式的朋友都很了解嵌入式设备上DEBUG的麻烦,特别是一些缺乏断电工具和没有UI界面的设备.久而久之,开发一个新东西,首先就是要先搞定DEBUG手段.最近写了几个测试的pyth ...

  3. Python多环境管理神器(pyenv)

    前面我们已经介绍了,python中两种最基础的虚拟环境管理工具,venv和virtualenv,其中virtualenv可以和virtualenvwrapper配合使用.详情请参考:https://w ...

  4. DeBug Python神级工具PySnooper

    安装 pip3 install pysnooper import pysnooper @pysnooper.snoop() def number_to_bits(number): if number: ...

  5. 【Python】debug工具-pdb(转)

    Debug功能对于developer是非常重要的,python提供了相应的模块pdb让你可以在用文本编辑器写脚本的情况下进行debug. pdb是python debugger的简称. 常用的一些命令 ...

  6. python--debug神器pysnooper

    使用它你可以获得什么优势: (1)无需用print就可以获得变量的值: (2)以日志地形式进行保存,方便随时查看: (3)可以根据需要,设置调用函数的深度: (4)多个函数的日志,可以设置前缀进行标识 ...

  7. Python 【Debug排除程序故障】

    debug #排除程序故障 print()函数常和#号注释结合在一起用来debug 多行注释有两种快捷操作:1.在需要注释的多行代码块前后加一组三引号''' 2.选中代码后使用快捷键操作:Window ...

  8. Python多环境管理神器(Anaconda)

    为了解决python多版本共存,解决不同版本之间的依赖冲突,虚拟环境隔离等问题,我们前面介绍了venv.virtualenv.virtualenvwrapper.pyenv.pipenv等众多工具.下 ...

  9. python命令行神器Click

    原文: http://www.lengirl.com/code/python-click.html Click 是用Python写的一个第三方模块,用于快速创建命令行.我们知道,Python内置了一个 ...

随机推荐

  1. Day4 - D - Watchcow POJ - 2230

    Bessie's been appointed the new watch-cow for the farm. Every night, it's her job to walk across the ...

  2. 040、Java中逻辑运算之短路与运算“&&”

    01.代码如下: package TIANPAN; /** * 此处为文档注释 * * @author 田攀 微信382477247 */ public class TestDemo { public ...

  3. PHP: isset与empty的区别

    PHP的isset()函数 一般用来检测变量是否设置 功能:检测变量是否设置 返回值: 若变量不存在则返回 FALSE 若变量存在且其值为NULL,也返回 FALSE 若变量存在且值不为NULL,则返 ...

  4. Centos 8双网卡设置

    原理:不管开发板是通过直连.路由器还是交换机连接到PC机,最终都是接到PC的以太网网卡(对笔记本来说,一般存在两个网卡,一个WIFI网卡和以太网网卡):因此要实现PC机与虚拟机的互ping,必须把虚拟 ...

  5. Json实体类驼峰名称转化器

    背景 我们常用一些网站,将json转化成实体类.但不巧的是,这些自动生成的都是小驼峰.需要进一步的改成大驼峰+JsonProperty.接着同事说他已经有个工具了.我稍微简化了一下 方法 首先行分离. ...

  6. Web服务器:Apache的安装使用

    Apache我们很熟悉,已经用了不短时间的tomcat就是apache公司开发的,那么这款以公司命名的所谓的Web服务器Apache,又到底什么呢? 一.概念 Apache是一个静态的Web服务器,是 ...

  7. yum对于包和软件的安装、升级和卸载总结

    在Centos下yum的安装.升级和卸载 一.使用yum安装和卸载软件,有个前提是yum安装的软件包都是rpm格式的.安装的命令是,yum install ~,yum会查询数据库,有无这一软件包,如果 ...

  8. 二十五、JavaScript之查找字符串中的字符串indexOf和lastIndexOf的用法

    一.代码如下 二.效果如下 <!DOCTYPE html> <html> <meta http-equiv="Content-Type" conten ...

  9. Docker NGINX 例子

    版权所有,未经许可,禁止转载 章节 Docker 介绍 Docker 和虚拟机的区别 Docker 安装 Docker Hub Docker 镜像(image) Docker 容器(container ...

  10. 黑马oracle_day01:01.oracle体系结构

    01.oracle体系结构 02.oracle的基本操作 03.oracle的查询 04.oracle对象 05.oracle编程 01.oracle体系结构 开发环境:VMware® Worksta ...