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

发布于 2021-01-29 17:01:38

它给了我这个错误:

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程序时。

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

提前致谢 ;)

关注者
0
被浏览
47
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

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

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

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

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

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



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看