如何修复此python错误?RuntimeError:词典在迭代过程中更改了大小

问题描述

根据其他答案,通常的建议是避免使用iteritemsitems改为使用)。当然,这 您的选择,因为该iteritems调用是在系统调用的最深处代表您完成的。

因此,我建议,假设Auxiliar.DataCollection.getInfo(1)返回一个字典(在复制过程中正在更改的字典),那就是您将deepcopy调用更改为:

self.data1 = copy.deepcopy(dict(Auxiliar.DataCollection.getInfo(1)))

这需要对所讨论的字典进行“快照”,并且快照不会更改,因此您会很好。

如果Auxiliar.DataCollection.getInfo(1)确实 无法 返回的字典,但一些更复杂的对象,其中包括作为类型的字典和/或项目的属性,这将是一个比较复杂一点,因为这些类型的字典是你需要什么样的快照。但是,在这种情况下是不可能具体化的,因为您绝对不了解构成该关键Auxiliar.DataCollection.getInfo(1)调用代码!-)

解决方法

它给了我这个错误:

Exception in thread Thread-163:
Traceback (most recent call last):
  File "C:\Python26\lib\threading.py",line 532,in __bootstrap_inner
    self.run()
  File "C:\Python26\lib\threading.py",line 736,in run
    self.function(*self.args,**self.kwargs)
  File "C:\Users\Public\SoundLog\Code\Código Python\SoundLog\SoundLog.py",line 337,in getInfo
    self.data1 = copy.deepcopy(Auxiliar.DataCollection.getInfo(1))
  File "C:\Python26\lib\copy.py",line 162,in deepcopy
    y = copier(x,memo)
  File "C:\Python26\lib\copy.py",line 254,in _deepcopy_dict
    for key,value in x.iteritems():
RuntimeError: dictionary changed size during iteration

在执行我的python程序时。

我如何避免这种情况发生?

提前致谢 ;)