我很想尝试python。我知道我可以检查并使用frame.f_locals
和frame.f_globals
将局部和全局变量注入到框架中,但我现在很想创建一个完整的调用堆栈。Python是否可以重新创建整个调用堆栈?
什么阻止我改变堆栈信息是因为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()
。
我知道stackless python可能有我想要的,但仍然无法更改frame.f_back
属性。
还有更多的比你的堆栈跟踪直接看到Python解释器的状态。除非你设计一个程序来捕捉它的状态,否则这是Python不可或缺的任务,具有python的动态特性。 – 2013-03-03 10:15:15
这可能只有在您修改解释器本身时才有可能。 – 2013-03-03 10:24:14
我想写一个C扩展。 – 2013-03-03 10:24:31