它给了我这个错误:
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)))
这需要有问题的dict的"快照",快照不会改变,所以你会没事的.
如果Auxiliar.DataCollection.getInfo(1)
确实无法返回的字典,但一些更复杂的对象,其中包括作为类型的字典和/或项目的属性,这样会更复杂一些,因为这些类型的字典是你需要什么快照.但是,在这种情况下,不可能更具体,因为你完全不知道组成这个关键Auxiliar.DataCollection.getInfo(1)
调用的代码! - )