我正在尝试修复由他人使用python 2.7.16编写的8年历史的视频游戏。主要问题是,每当尝试保存时它就会崩溃。每当尝试将数据腌制到保存文件中时,它就会崩溃并创建不完整的保存文件。
我最近的第二个错误是达到最大递归限制错误。我通过使用以下方法增加了递归限制来对此进行修补。
sys.setrecursionlimit(1500)
尽管存在根本问题,但我认为这无法解决。现在我收到以下错误:
RuntimeError: dictionary changed size during iteration
我试图让程序将泡菜的内容打印到控制台中,但是我得到的是内存地址而不是数据。
已打印 和 A和B是十六进制的内存地址,我不想特别输入。但如果需要,我可以。
这里是发生问题的代码。
sys.setrecursionlimit(2000) #changing the recursion limit to see if it fixes cpickle.
file = open(filename,"w")
print self #Printing what will be pickled into a save to look for errors.
try: cPickle.dump(self,file)
except MemoryError:
print "DEBUGGING: cPickle failed, likely because of memory issue. Switching to regular pickle. Regular pickle is slower but less memory intensive."
import pickle
try: pickle.dump(self,file)
except: print "DEBUGGING: regular pickle also failed. The game was NOT saved"
else: print "game saved"
except:
print "some weird error with cPickle - shown here:"
cPickle.dump(self,file)
如果保存成功并且程序继续运行,我希望获得要保存的self内容和“游戏已保存”消息。
实际输出为“ ”,然后是cpickle运行所在的文件和行的路径,然后是“ cPickle出现一些奇怪的错误-此处显示:”然后是“ RuntimeError:字典在迭代过程中更改了大小”,最后它崩溃了。
编辑: 添加以下代码以拍摄self快照后的新实际输出。现在,新代码中出现错误。如果在创建快照时没有崩溃,则将立即对selfCopy1进行腌制。
selfCopy1 = copy.deepcopy(dict(self))
print selfCopy1
try: cPickle.dump(selfCopy1,file)
错误消息:
TypeError: iteration over non-sequence