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

原文链接:

史上最方便的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. Day6 - I - Sticks Problem POJ - 2452

    Xuanxuan has n sticks of different length. One day, she puts all her sticks in a line, represented b ...

  2. 如何在PHP中进行会话处理?

    在PHP中会话处理是一个很重要的概念,它允许用户信息在网站或应用程序的所有页面上保持不变.下面本篇文章就来带大家学习一下PHP中会话处理的基础知识,希望对大家有所帮助. PHP中什么是会话(sessi ...

  3. 数据结构——java Queue类

    定义 队列是一种特殊的线性表,它只允许在表的前端进行删除操作,而在表的后端进行插入操作. LinkedList类实现了Queue接口,因此我们可以把LinkedList当成Queue来用 图例 Que ...

  4. ios之开源

    a http://code.cocoachina.com b http://code4app.com c http://www.oschina.net/ios/codingList/ d github ...

  5. 从0开始自己配置一个vps虚拟服务器(1)

    我前几年买的虚拟机都被我荒废了,我已经配置过很多遍了,但是从来没有真的用过.因为我前几个月之前又新买了一个便宜的服务,准备写新的东西.供应商pacificrack,真的很烂,一直断,控制面板还打不开, ...

  6. C++路径的整理

    写C++,路径的问题一直都让人很头疼,抽空整理一些方法:也许以后会用到: 1."./" 加不加都一样,就是指当前目录 2."../" 表示当前目录的上级目录,即 ...

  7. 批处理+7zip解压用纯数字加密的压缩包zip

    @echo off set path=c:\Program Files\7-Zip; for /L %%i in (0,1,100000) do ( call :myfunc %%i ) goto : ...

  8. springboot#filter

    _ Filter不能处理用户请求,也不能对客户端生成响应. 主要用于对HttpServletRequest 进行预处理,也可以对HttpServletResponse 进行后处理,是个典型的处理链.完 ...

  9. 我的Java语言学习日志1_"简单的银行管理系统实现"

    设计步骤:注意:本篇代码,直接建两个类( Bank_Account.BankManage)在BankManage往里面填方法就行.是为了让和我一样自学朋友可以更快的接受.但是代码优化的空间还是很大的( ...

  10. 第二阶段scrum-10

    1.整个团队的任务量: 2.任务看板: 会议照片: 产品状态: 等待发布