当前位置:  开发笔记 > 编程语言 > 正文

如何解决这个python错误?RuntimeError:字典在迭代期间改变了大小

如何解决《如何解决这个python错误?RuntimeError:字典在迭代期间改变了大小》经验,为你挑选了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程序时.

我怎样才能避免这种情况发生?

提前致谢 ;)



1> Alex Martell..:

根据其他答案,正常的建议是避免使用iteritems(items改为使用).当然,这不是您的选择,因为iteritems呼叫是在您的系统呼叫的深处代表您完成的.

因此,我建议,假设Auxiliar.DataCollection.getInfo(1)返回一个字典(这是在复制期间正在改变的字典)是你将你的deepcopy呼叫改为:

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

这需要有问题的dict的"快照",快照不会改变,所以你会没事的.

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

推荐阅读
mobiledu2402851377
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有