python的debug神器PySnooper
同事给我推荐了这个调试神器,一直没工夫看,今天看了下。
原文链接:
体验了下,感觉最好的用法: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的更多相关文章
- 极简Python DeBug工具——PySnooper
DeBug Python 代码的方式有很多种?比如: (1)设置断点 (2)print函数 (3)... 本文要介绍的是一个新开源的项目PySnooper ,只要给有疑问的代码加上装饰器,各种信息一目 ...
- Python的DEBUG LOG
一直在嵌入式行业,熟悉嵌入式的朋友都很了解嵌入式设备上DEBUG的麻烦,特别是一些缺乏断电工具和没有UI界面的设备.久而久之,开发一个新东西,首先就是要先搞定DEBUG手段.最近写了几个测试的pyth ...
- Python多环境管理神器(pyenv)
前面我们已经介绍了,python中两种最基础的虚拟环境管理工具,venv和virtualenv,其中virtualenv可以和virtualenvwrapper配合使用.详情请参考:https://w ...
- DeBug Python神级工具PySnooper
安装 pip3 install pysnooper import pysnooper @pysnooper.snoop() def number_to_bits(number): if number: ...
- 【Python】debug工具-pdb(转)
Debug功能对于developer是非常重要的,python提供了相应的模块pdb让你可以在用文本编辑器写脚本的情况下进行debug. pdb是python debugger的简称. 常用的一些命令 ...
- python--debug神器pysnooper
使用它你可以获得什么优势: (1)无需用print就可以获得变量的值: (2)以日志地形式进行保存,方便随时查看: (3)可以根据需要,设置调用函数的深度: (4)多个函数的日志,可以设置前缀进行标识 ...
- Python 【Debug排除程序故障】
debug #排除程序故障 print()函数常和#号注释结合在一起用来debug 多行注释有两种快捷操作:1.在需要注释的多行代码块前后加一组三引号''' 2.选中代码后使用快捷键操作:Window ...
- Python多环境管理神器(Anaconda)
为了解决python多版本共存,解决不同版本之间的依赖冲突,虚拟环境隔离等问题,我们前面介绍了venv.virtualenv.virtualenvwrapper.pyenv.pipenv等众多工具.下 ...
- python命令行神器Click
原文: http://www.lengirl.com/code/python-click.html Click 是用Python写的一个第三方模块,用于快速创建命令行.我们知道,Python内置了一个 ...
随机推荐
- [Codeforces]1263E Editor
The development of a text editor is a hard problem. You need to implement an extra module for bracke ...
- “~" 的用法
“~" 的用法 let arr = ['weixin','qq','weibo'] console.log(arr.indexOf('aa'),~arr.indexOf('aa'),'aa' ...
- iptable实现端口转发
利用iptables的规则来实现端口转发: 第一步需要将内核参数的net.ipv4.ip_forward=1 场景一:实现本地端口转发 本地端口转发实在PREROUTING链中将端口做NAT转换: # ...
- vuejs+thinkphp5+phpsocketIO+timer数据及时更新
1.安装thinkphp5.0以上版本包含workerman框架2.composer安装composer require workerman/phpsocket.io3.vue中调用需要加载weapp ...
- 使用NlohmannJson写JSON保留插入顺序
1. 正文 nlohmann/json是一个C++的读写JSON的组件,号称使用现代C++范式写的.简单看了一下,这个组件确实包含了很多cpp11以上的特性,在vs2015及一下的版本甚至没办法正常编 ...
- 使用HttpURLConnection方式访问接口
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import ...
- C#使用throw和throw ex的区别(转)
使用throw和throw ex的区别 之前,在使用异常捕获语句try...catch...throw语句时,一直没太留意几种用法的区别,前几天调试程序时无意中了解到几种使用方法是有区别的,网上一查, ...
- GDI+3
关于这个的例子其实网上已经有这方面的资料了,但是为了文章的完整性,还是觉得有必要讲解.我们先来看一下效果: ( 图2 )接下来看看这是如何做到的. 思路:聊天窗体上有一个截图按钮,点击按钮后, ...
- Java高级特性——注解,这也许是最简单易懂的文章了
最近,浪尖在做flink的项目时source和sink的绑定那块用到了注解,当然新版本1.6以后就变为server load的方式加载. 但是浪尖也是觉得很有毕业讲一下注解,毕竟高级免试也会问答的吧. ...
- 前端第二篇---前端基础之CSS
前端第二篇---前端基础之CSS 目录 一.css介绍 二.css语法 三.css的几种引入方式 四.css选择器 五.css属性相关 六.盒子模型 拓展 一.css介绍 CSS(Cascading ...