RuntimeError: OrderedDict mutated during iteration

阳光穿透心脏的1/2处 2023-02-19 13:22 92阅读 0赞

RuntimeError: OrderedDict mutated during iteration

  1. Traceback (most recent call last):
  2. File "/home/yongqiang/pytorch_work/end2end-asr-pytorch-example/yongqiang.py", line 18, in <module>
  3. for key, value in dict_data.items():
  4. RuntimeError: OrderedDict mutated during iteration

1. RuntimeError: OrderedDict mutated during iteration

  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. # yongqiang cheng
  4. from __future__ import absolute_import
  5. from __future__ import division
  6. from __future__ import print_function
  7. from collections import OrderedDict
  8. dict_data = OrderedDict()
  9. dict_data['1'] = "cheng"
  10. dict_data['2'] = "yong"
  11. dict_data['3'] = "qiang"
  12. dict_data['4'] = "forever"
  13. dict_data['5'] = "strong"
  14. for key, value in dict_data.items():
  15. print(key + ': ' + value)
  16. if ('3' == key):
  17. del dict_data[key]
  18. /home/yongqiang/miniconda3/envs/pt-1.4_py-3.6/bin/python /home/yongqiang/pytorch_work/end2end-asr-pytorch-example/yongqiang.py
  19. Traceback (most recent call last):
  20. File "/home/yongqiang/pytorch_work/end2end-asr-pytorch-example/yongqiang.py", line 18, in <module>
  21. for key, value in dict_data.items():
  22. RuntimeError: OrderedDict mutated during iteration
  23. 1: cheng
  24. 2: yong
  25. 3: qiang
  26. Process finished with exit code 1

2. The issue is that dict_data.items() does not return a copy, so it should not be modified while iterating.

Python 中赋值语句不复制对象,而是在目标和对象之间创建绑定 (bindings) 关系。对于自身可变或者包含可变项的集合对象,开发者有时会需要生成其副本用于改变操作,进而避免改变原对象。

  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. # yongqiang cheng
  4. from __future__ import absolute_import
  5. from __future__ import division
  6. from __future__ import print_function
  7. from collections import OrderedDict
  8. dict_data = OrderedDict()
  9. dict_data['1'] = "cheng"
  10. dict_data['2'] = "yong"
  11. dict_data['3'] = "qiang"
  12. dict_data['4'] = "forever"
  13. dict_data['5'] = "strong"
  14. for key, value in list(dict_data.items()):
  15. print(key + ': ' + value)
  16. if ('3' == key):
  17. del dict_data[key]
  18. print()
  19. for key, value in list(dict_data.items()):
  20. print(key + ': ' + value)
  21. /home/yongqiang/miniconda3/envs/pt-1.4_py-3.6/bin/python /home/yongqiang/pytorch_work/end2end-asr-pytorch-example/yongqiang.py
  22. 1: cheng
  23. 2: yong
  24. 3: qiang
  25. 4: forever
  26. 5: strong
  27. 1: cheng
  28. 2: yong
  29. 4: forever
  30. 5: strong
  31. Process finished with exit code 0

发表评论

表情:
评论列表 (有 0 条评论,92人围观)

还没有评论,来说两句吧...

相关阅读