使用这个开源工具来监控 Python 中的变量
创始人
2024-03-02 07:09:30
0

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

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

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

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

安装

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

$ python3 -m pip install watchpoints

在Python中使用 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 最酷的地方就是使用直观。你对一些数据感兴趣吗?只要“观察”它,你就会知道你的变量何时发生变化。

尝试 watchpoints

我在 GitHub 上开发维护了 watchpoints,并在 Apache 2.0 许可下发布了它。安装并使用它,当然也欢迎大家做出贡献。


via: https://opensource.com/article/21/4/monitor-debug-python

作者:Tian Gao 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

相关内容

自变量机器人受邀出席工信部...
7月15日至17日,工业和信息化部人形机器人与具身智能标准化技术委...
2026-07-17 23:41:18
自变量开源 Wall-OS...
2026-05-28 16:19:28 作者:狼叫兽 自变量机器...
2026-05-28 20:29:33
“教师是‘AI+教育’的核...
本报讯(记者 黄璐璐)“人工智能绝非仅为教育者工具箱增添的新工具,...
2026-05-14 10:46:39
AI+Python数据分析...
教学大纲 01 课程性质和目的 数据分析与可视化为数据科学与大数据...
2026-05-06 20:23:25
什么是miniQMT,相比...
什么是miniQMT,相比大QMT有什么特点? 迅投 miniQM...
2026-01-22 09:51:16
让开源生态评价开源模型!
在具身智能这一软硬件深度耦合的前沿领域,构建一个高质量的开源基础模...
2026-01-12 15:46:33

热门资讯

“Linux 中国” 开源社区... 这是一个艰难的决定 —— 这不是调侃,而是当你真正做出改变了你十几年生活轨迹的决定时,你就会明白这个...
硬核观察 #1263 德国铁路... #1 德国铁路公司招聘 Windows for Workgroups 3.11 管理员该职位要求了解...
人工智能教程(七):Sciki... 在本系列的 上一篇文章 中,我们用 TensorFlow 构建了第一个神经网络,然后还通过 Kera...
关闭 WSL 中正在运行的 L... 以下是使用 WSL 关闭在 Windows 内运行的 Linux 系统的不同方法。你使用 WSL 在...
MX Linux 23.2 “... 最新的 MX Linux 23.2 小版本更新带来了基本的改进和新增功能。MX Linux 推出了 ...
硬核观察 #1262 网络上最... #1 网络上最古老的软件存档库之一即将关闭美国新墨西哥州立大学(NMSU)最近宣布,即将于 2024...
如何在 RHEL 上通过绑定配... 在 Linux 中,你可以根据自己的需要创建高级网络设置,如 网络绑定 Network Bondin...
Linux Matrix 消息... Matrix 用户可以升级 Fractal 6 了!Fractal 是目前 最好的 Matrix 客...
如何通过 VLC 使用字幕 使用 VLC 媒体播放器播放和管理字幕的新手指南。我是一个超级动漫迷,如果你想观看最新的剧集,那么你...
硬核观察 #1261 X 计划... #1 X 计划在奥斯汀建立内容审核总部据报道,该部门将招聘 100 名全职员工,将主要关注 CSE ...