我正在寻找python堆栈框架的深层副本,因为我正在对Python的调试器(PDB)进行更改。
curframe = self.get_stack(self.__f, self.__t)[0][self.curindex][0]
curframe_locals = copy.deepcopy(curframe.f_locals) # This line fails
# ERROR: *** TypeError: TypeError('object.__new__(NotImplementedType) is not safe, use NotImplementedType.__new__()',)
curframe_globals = curframe.f_globals
哪里
__f = <frame object at 0x10185fad0>
__t = None
但根据副本库,在此处找到:ftp://ftp.eso.org/scisoft/scisoft4/linux/redhat9/python/lib/python2.2/copy.py
此版本不会复制模块,类,函数,方法等类型, 也没有堆栈跟踪,堆栈框架,文件,套接字,窗口,也没有数组 任何类似的类型。
我的问题是我运行的程序在执行代码之前评估表达式,例如:
a = []
a.append(1) # This gets called twice, but I only want the affect to happen once.
# The program starts up a PDB instance and evaluates the lines execution and
# maintains the results.
我仍然想确保我进行评估,但需要对堆栈框架进行深层复制,以便评估不会导致不必要的更改,我可以采用哪种方式进行评估?
我正在考虑一个解决方案,我只是执行该过程并让它为我做深层复制,但我不确定这是否有效并且我需要管道输出回到父母那里。
谢谢!