Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从内存中检索对象_Python_Memory - Fatal编程技术网

Python 如何从内存中检索对象

Python 如何从内存中检索对象,python,memory,Python,Memory,我有一份工作已经干了好几个小时了。最后我得到一个例外,在结果出来之前。然而,所有的中间结果都保存到了dictionary对象中,我假设它在内存中。是否有访问此对象的方法 这是示例代码 def create_rgr(frames): new_frames ={} for radec in frames.keys(): for rframe in frames[radec]: rgr=subrgr(rframe,radec, store=1)

我有一份工作已经干了好几个小时了。最后我得到一个例外,在结果出来之前。然而,所有的中间结果都保存到了dictionary对象中,我假设它在内存中。是否有访问此对象的方法

这是示例代码

def create_rgr(frames):
    new_frames ={}
    for radec in frames.keys():
        for rframe in frames[radec]:
            rgr=subrgr(rframe,radec, store=1)
            new_frames.setdefault(radec,[]).append(rgr)

     ##Exception thrown before this point ###########

    tools.save(new_frames)

我不是百分之百肯定我会遵守

如果长时间运行的Python进程由于异常而终止,那么不,您将无法获取现在已失效的进程在内存中的数据

如果Python进程仍在运行,并且您可以向其中输入命令(或者可以向脚本中添加命令并重新运行),那么请查看您提到的字典的内容


我缺少什么?

如果要确保即使在出现异常的情况下也能存储结果,可以使用
finally
块:

def create_rgr(frames):
    new_frames ={}
    try:
        for radec in frames.keys():
            for rframe in frames[radec]:
                rgr=subrgr(rframe,radec, store=1)
                new_frames.setdefault(radec,[]).append(rgr)

         ##Exception thrown before this point ###########
    finally:   
        tools.save(new_frames)

如果已从命令行启动此过程,则可以检查回溯

>>> def a(x): y=x; 0/0
...
>>> def b(x): a(x)
...
>>> try: b(100)
... except: import sys; e=sys.exc_info()
...
>>> e
(<type 'exceptions.ZeroDivisionError'>, ZeroDivisionError('integer division or modulo by zero',), <traceback object at 0x00B4B670>)
>>> e[2]
<traceback object at 0x00B4B670>
>>> dir(e[2])
['__class__', '__delattr__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'tb_frame', 'tb_lasti', 'tb_lineno', 'tb_next']
>>> e[2].tb_next
<traceback object at 0x00B4B648>
>>> e[2].tb_next.tb_next
<traceback object at 0x00B4B5F8>
>>> e[2].tb_next.tb_next.tb_next
>>> e[2].tb_next.tb_next
>>> e[2].tb_next.tb_next.tb_frame
<frame object at 0x00B88060>
>>> dir(e[2].tb_next.tb_next.tb_frame)
['__class__', '__delattr__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'f_back', 'f_builtins', 'f_code', 'f_exc_traceback', 'f_exc_type', 'f_exc_value', 'f_globals', 'f_lasti', 'f_lineno', 'f_locals', 'f_restricted', 'f_trace']
>>> e[2].tb_next.tb_next.tb_frame.f_locals
{'y': 100, 'x': 100}
定义a(x):y=x;0/0 ... >>>def b(x):a(x) ... >>>尝试:b(100) ... 除:进口系统;e=系统执行信息() ... >>>e (,ZeroDivisionError('整数除法或零模',),) >>>e[2] >>>署长(e[2]) “UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU,“UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU类类类类类类类类类类类类类类类类类类类类类类类类类类类类类,”,”,”,”,”UUUUUUUuuuuu'、“tb\u帧”、“tb\u lasti”、“tb\u行号”、“tb\u下一个”] >>>e[2].tb_下一步 >>>e[2].tb_next.tb_next >>>e[2].tb_next.tb_next.tb_next >>>e[2].tb_next.tb_next >>>e[2].tb_next.tb_next.tb_frame >>>目录(e[2].tb_next.tb_next.tb_frame) “UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU,“UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU类类类类类类类类类类类类类类类类类类类类类类类类类类类类类,”,”,”,”,”UUUUUUU“f_”、“f_back”、“f_builtins”、“f_code”、“f_exc_traceback”、“f_exc_type”、“f_exc_value”、“f_globals”、“f_lasti”、“f_lineno”、“f_locals”、“f_rest”ricted',f_trace'] >>>e[2].tb_next.tb_next.tb_frame.f_局部变量 {'y':100,'x':100}
这里有调用堆栈中所有变量的值。好吧,他们会一直呆在这里直到下一个例外。

我想你已经回答了我的问题!-异常已经抛出!你想做什么的目的还不清楚,但为什么不试试/例外,在例外部分,你应该能查到那本字典。@Bogdan,你说的是对的。我只是忘了包括try/except块!现在我得重新开始工作了!