如何修复此python错误?RuntimeError:词典在迭代过程中更改了大小
它给了我这个错误:
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程序时。
我如何避免这种情况发生?
提前致谢 ;)
-
根据其他答案,通常的建议是避免使用
iteritems
(items
改为使用)。当然,这 不是
您的选择,因为该iteritems
调用是在系统调用的最深处代表您完成的。因此,我建议,假设
Auxiliar.DataCollection.getInfo(1)
返回一个字典(在复制过程中正在更改的字典),那就是您将deepcopy
调用更改为:self.data1 = copy.deepcopy(dict(Auxiliar.DataCollection.getInfo(1)))
这需要对所讨论的字典进行“快照”,并且快照不会更改,因此您会很好。
如果
Auxiliar.DataCollection.getInfo(1)
确实 无法
返回的字典,但一些更复杂的对象,其中包括作为类型的字典和/或项目的属性,这将是一个比较复杂一点,因为这些类型的字典是你需要什么样的快照。但是,在这种情况下是不可能具体化的,因为您绝对不了解构成该关键Auxiliar.DataCollection.getInfo(1)
调用的代码!-)