Python 是否可以重现整个调用栈?
我对用Python进行实验很感兴趣。我知道可以通过 frame.f_locals
和 frame.f_globals
来查看和修改局部和全局变量,但我现在想创建一个完整的调用栈。
让我无法直接更改栈信息的原因是,Python不允许这样做。
我其实考虑过通过编程的方式来改变我正在使用的Python模块,以模拟栈的变化。但我知道这是个糟糕的解决方案,因为如果客户端代码使用了 if
、while
、with
和 try
,我的代码就会轻易出错。
我也尝试过操作 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
属性。
3 个回答
0
>>> type(sys._getframe())()
TypeError: cannot create 'frame' instances
抱歉。
0
你可以看看 AST模块 和 symtable模块。
1
你可以看看在线的 Python 教学工具(http://www.pythontutor.com/)。这个工具的作用是,在代码运行的时候,它会捕捉每一步的画面,帮助你可视化 Python 代码的执行过程。这样,你就可以使用这些捕捉到的画面来更好地理解代码是怎么运行的。