Watchpoints 是一个简单但功能强大的工具,可以帮助你在调试 Python 时监控变量。
成都创新互联公司服务项目包括唐县网站建设、唐县网站制作、唐县网页制作以及唐县网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,唐县网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到唐县省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!
在调试代码时,你经常面临着要弄清楚一个变量何时发生变化。如果没有任何高级工具,那么可以选择使用打印语句在期望它们更改时输出变量。然而,这是一种非常低效的方法,因为变量可能在很多地方发生变化,并且不断地将其打印到终端上会产生很大的干扰,而将它们打印到日志文件中则变得很麻烦。
这是一个常见的问题,但现在有一个简单而强大的工具可以帮助你监控变量:watchpoints。
“监视点”的概念在 C 和 C++ 调试器中很常见,用于监控内存,但在 Python 中缺乏相应的工具。watchpoints
填补了这个空白。
要使用它,你必须先用 pip
安装它:
$ python3 -m pip install watchpoints
对于任何一个你想监控的变量,使用 watch
函数对其进行监控。
from watchpoints import watch
a = 0
watch(a)
a = 1
当变量发生变化时,它的值就会被打印到标准输出:
====== Watchpoints Triggered ======
Call Stack (most recent call last):
(my_script.py:5): > a = 1
a:
0
->
1
信息包括:
它不仅适用于变量本身,也适用于对象的变化:
from watchpoints import watch
a = []
watch(a)
a = {} # 触发
a["a"] = 2 # 触发
当变量 a
被重新分配时,回调会被触发,同时当分配给 a
的对象发生变化时也会被触发。
更有趣的是,监控不受作用域的限制。你可以在任何地方观察变量/对象,而且无论程序在执行什么函数,回调都会被触发。
from watchpoints import watch
def func(var):
var["a"] = 1
a = {}
watch(a)
func(a)
例如,这段代码打印出:
====== Watchpoints Triggered ======
Call Stack (most recent call last):
(my_script.py:8): > func(a)
func (my_script.py:4):
> var["a"] = 1
a:
{}
->
{'a': 1}
watch
函数不仅可以监视一个变量,它也可以监视一个字典或列表的属性和元素。
from watchpoints import watch
class MyObj:
def __init__(self):
self.a = 0
obj = MyObj()
d = {"a": 0}
watch(obj.a, d["a"]) # 是的,你可以这样做
obj.a = 1 # 触发
d["a"] = 1 # 触发
这可以帮助你缩小到一些你感兴趣的特定对象。
如果你对输出格式不满意,你可以自定义它。只需定义你自己的回调函数:
watch(a, callback=my_callback)
# 或者全局设置
watch.config(callback=my_callback)
当触发时,你甚至可以使用 pdb
:
watch.config(pdb=True)
这与 breakpoint()
的行为类似,会给你带来类似调试器的体验。
如果你不想在每个文件中都导入这个函数,你可以通过 install
函数使其成为全局:
watch.install() # 或 watch.install("func_name") ,然后以 func_name() 方式使用
我个人认为,watchpoints
最酷的地方就是使用直观。你对一些数据感兴趣吗?只要“观察”它,你就会知道你的变量何时发生变化。
我在 GitHub 上开发维护了 watchpoints
,并在 Apache 2.0 许可下发布了它。安装并使用它,当然也欢迎大家做出贡献。
分享名称:使用这个开源工具来监控Python中的变量
本文路径:http://www.shufengxianlan.com/qtweb/news16/259966.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联