标签:debugger python PySnooper number debug bits 装饰 调试 函数
同事给我推荐了这个调试神器,一直没工夫看,今天看了下。
原文链接:
体验了下,感觉最好的用法: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 啊哈,我计算完啦。给自己加个鸡腿!
标签:debugger,python,PySnooper,number,debug,bits,装饰,调试,函数 来源: https://www.cnblogs.com/khacker/p/10992546.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。