社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Git

GitHub 热门:别再用 print 输出来调试代码了

Python开发者 • 7 年前 • 909 次点击  

(给Python开发者加星标,提升Python技能


原创整理:Python开发者(id:PythonCoder)

4 月 23 日,GitHub 每日趋势榜第一位是一个 Python 相关项目:PySnooper。



该项目很快获取 2200 Star。


PySnooper 是个什么东西?


如果你写的 Python 代码不能按如期那样运行,你会绞尽脑汁想为啥出错了。虽然你希望有支持断点的成熟调试器,但或许你现在不想去设置这样的调试器。


你想知道哪些行代码是正常运行,哪些行不正常。据说大多数人会在可疑位置使用 print 输出语句。


其实 PySnooper 的作用有点类似,你不用小心谨慎地用 print 输出语句,只需在想调试的函数中个装饰器。然后得到函数的详细日志,包括运行了哪些行、何时运行,以及何时更改了局部变量。


为什么 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]
number_to_bits(6)


输出范例

Starting var:.. number = 6


    
21:14:32.099769 call         3 @pysnooper.snoop()21:14:32.099769 line         5     if number:21:14:32.099769 line         6         bits = []New var:....... bits = []21:14:32.099769 line         7         while number:21:14:32.099769 line         8             number, remainder = divmod(number, 2)New var:....... remainder = 0Modified var:.. number = 321:14:32.099769 line         9             bits.insert(0, remainder)Modified var:.. bits = [0]21:14:32.099769 line         7         while number:21:14:32.099769 line         8             number, remainder = divmod(number, 2)Modified var:.. number = 1Modified var:.. remainder = 121:14:32.099769 line         9             bits.insert(0, remainder)Modified var:.. bits = [1, 0]21:14:32.099769 line         7         while number:21:14:32.099769 line         8             number, remainder = divmod(number, 2)Modified var:.. number = 021:14:32.099769 line         9             bits.insert(0, remainder)Modified var:.. bits = [1, 1, 0]21:14:32.099769 line         7         while number:21:14:32.099769 line        10         return bits21:14:32.099769 return      10         return bits


有兴趣的童鞋,请收藏:

https://github.com/cool-RR/PySnooper


推荐阅读

(点击标题可跳转阅读)

GitHub 热门:微软新开源的 Python 静态类型检查器

GitHub 热门:各大网站的 Python 爬虫登录汇总

GitHub 热门:机器学习 100 天(中文版)


觉得本文对你有帮助?请分享给更多人

关注「Python开发者」加星标,提升Python技能

好文章,我在看❤️

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/32061