如何使用Watchpoints来监控Python 中的变量

发布时间:2021-10-09 17:06:43 作者:柒染
来源:亿速云 阅读:357

如何使用Watchpoints来监控Python 中的变量,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

Watchpoints 是一个简单但功能强大的工具,可以帮助你在调试 Python 时监控变量。

在调试代码时,你经常面临着要弄清楚一个变量何时发生变化。如果没有任何高级工具,那么可以选择使用打印语句在期望它们更改时输出变量。然而,这是一种非常低效的方法,因为变量可能在很多地方发生变化,并且不断地将其打印到终端上会产生很大的干扰,而将它们打印到日志文件中则变得很麻烦。

这是一个常见的问题,但现在有一个简单而强大的工具可以帮助你监控变量:watchpoints。

“监视点”的概念在 C 和 C++ 调试器中很常见,用于监控内存,但在 Python 中缺乏相应的工具。watchpoints 填补了这个空白。

安装

要使用它,你必须先用 pip 安装它:

$ python3 -m pip install watchpoints

在Python中使用 watchpoints

对于任何一个你想监控的变量,使用 watch 函数对其进行监控。

from watchpoints import watch a = 0watch(a)a = 1

当变量发生变化时,它的值就会被打印到标准输出

====== Watchpoints Triggered ====== Call Stack (most recent call last):  <module> (my_script.py:5):> a = 1a: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):   <module> (my_script.py:8):> func(a)  func (my_script.py:4):> var["a"] = 1a:{}->{'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 最酷的地方就是使用直观。你对一些数据感兴趣吗?只要“观察”它,你就会知道你的变量何时发生变化。

尝试 watchpoints

我在 GitHub 上开发维护了 watchpoints,并在 Apache 2.0 许可下发布了它,安装并使用它。

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注亿速云行业资讯频道,感谢您对亿速云的支持。

推荐阅读:
  1. 通过nagios使用MegaCli来监控raid
  2. 使用flow来规范javascript的变量类型

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

python

上一篇:10个具有启发性的python项目分别指的是什么

下一篇:如何理解并实现索引的原理和优化

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》