3

我有兴趣尝试使用 python。frame.f_locals我知道我可以使用and检查并注入局部和全局变量到一个框架中frame.f_globals,但我现在渴望创建一个完整的调用堆栈。

使我无法更改堆栈信息的原因是 python 不允许我更改它。

我实际上已经考虑过以编程方式转换我正在使用的 python 模块,以模拟缠绕堆栈。但我知道这是一个糟糕的解决方案,因为客户端代码使用if, while,with并且try很容易破坏我的代码。

我也看过 manipulating frame.f_back,但无济于事。它是只读的。

>>> import sys
... 
... frm = sys._getframe()
... 
... frm.f_back = None
Traceback (most recent call last):
  File "<pyshell#4>", line 5, in <module>
    frm.f_back = None
TypeError: readonly attribute

我正在尝试做的事情

作为一项实验,我正在尝试fork()通过网络实现。

我知道无堆栈 python 可能有我想要的,但仍然无法更改frame.f_back属性。

4

3 回答 3

1

看看 Online Python Tutor ( http://www.pythontutor.com/ )。它的作用是在执行期间捕获帧以创建 Python 代码的可视化。因此,您可以使用捕获的帧。

于 2013-03-03T12:12:48.677 回答
0

你应该看看AST 模块symtable 模块

于 2013-03-03T13:16:07.627 回答
0
>>> type(sys._getframe())()

TypeError: cannot create 'frame' instances

对不起。

于 2013-03-03T10:16:33.737 回答