Python 是否可以重现整个调用栈?

3 投票
3 回答
772 浏览
提问于 2025-04-17 17:45

我对用Python进行实验很感兴趣。我知道可以通过 frame.f_localsframe.f_globals 来查看和修改局部和全局变量,但我现在想创建一个完整的调用栈。

让我无法直接更改栈信息的原因是,Python不允许这样做。

我其实考虑过通过编程的方式来改变我正在使用的Python模块,以模拟栈的变化。但我知道这是个糟糕的解决方案,因为如果客户端代码使用了 ifwhilewithtry,我的代码就会轻易出错。

我也尝试过操作 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 代码的执行过程。这样,你就可以使用这些捕捉到的画面来更好地理解代码是怎么运行的。

撰写回答