在Python中重新定义赋值运算符的行为,以便做更多的工作

在Python中重新定义赋值运算符的行为,以便做更多的工作,python,debugging,exception-handling,Python,Debugging,Exception Handling,对于我最后一年的项目,我正在构建一个调试框架。我正在做的任务之一是提供一个框架,允许程序员定义将执行的处理程序来处理其相应的异常。可用的工具之一是检查对象在其生命周期内直到异常发生之前所采用的一系列类型和值。I将分配的r.h.s.上评估的内容复制到我的环境中,索引l.h.s.例如a=3 这是将3写入a的内存地址以及我的_环境[“a”](显然作用域会使我的_环境的结构复杂化,但这是另一回事) 有几种方法可以做到这一点 传递给sys.settrace的函数可以使用PLY之类的工具分析正在发生的事情,

对于我最后一年的项目,我正在构建一个调试框架。我正在做的任务之一是提供一个框架,允许程序员定义将执行的处理程序来处理其相应的异常。可用的工具之一是检查对象在其生命周期内直到异常发生之前所采用的一系列类型和值。I将分配的r.h.s.上评估的内容复制到我的环境中,索引l.h.s.例如a=3

这是将3写入a的内存地址以及我的_环境[“a”](显然作用域会使我的_环境的结构复杂化,但这是另一回事)

有几种方法可以做到这一点

传递给sys.settrace的函数可以使用PLY之类的工具分析正在发生的事情,检测其分配,分割令牌,将第0个字符串作为l.h.s。它将执行该行,然后将值复制到我的环境中

我可以自己解析源代码,并在原始源代码中的赋值之后将所有赋值插入到我的环境中

我可以将每个文件转换为AST,并将分配节点更改为我需要它执行的操作

或者我可以劫持任何低级函数,或者任何负责为赋值生成代码的函数,使其行为加上我的行为


我想做最后一个选择,因为它是唯一一个可以做我需要的事情,而不需要做更多的解析或其他复杂的事情。这需要我在解释器的C部分编写,还是可以用Python编写?

嘿,Ignacio,如果要这样做,我需要编辑所有解析树并围绕所有赋值节点进行更改,还是可以安全地重新定义赋值节点来完成它的工作,再加上额外的赋值并将其编译为字节码,这是一个赋值语句,无法重新定义。嗨,Martineau,我有一种感觉,如果不用C写,我就无法得到我想要的东西。所以我问Ignacio的问题和你一样。有什么可以从支持DTrace的python中学到的吗?@kevpie谢谢,这是我要看的。现在,我将着重于能够给出错误发生之前发生的事件/快照的时间线。