RuntimeError: OrderedDict mutated during iteration

RuntimeError: OrderedDict mutated during iteration

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

1. RuntimeError: OrderedDict mutated during iteration

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# yongqiang cheng

from __future__ import absolute_import
from __future__ import division
from __future__ import print_function

from collections import OrderedDict

dict_data = OrderedDict()
dict_data['1'] = "cheng"
dict_data['2'] = "yong"
dict_data['3'] = "qiang"
dict_data['4'] = "forever"
dict_data['5'] = "strong"

for key, value in dict_data.items():
    print(key + ': ' + value)

    if ('3' == key):
        del dict_data[key]

/home/yongqiang/miniconda3/envs/pt-1.4_py-3.6/bin/python /home/yongqiang/pytorch_work/end2end-asr-pytorch-example/yongqiang.py
Traceback (most recent call last):
  File "/home/yongqiang/pytorch_work/end2end-asr-pytorch-example/yongqiang.py", line 18, in <module>
    for key, value in dict_data.items():
RuntimeError: OrderedDict mutated during iteration
1: cheng
2: yong
3: qiang

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) 關係。對於自身可變或者包含可變項的集合對象,開發者有時會需要生成其副本用於改變操作,進而避免改變原對象。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# yongqiang cheng

from __future__ import absolute_import
from __future__ import division
from __future__ import print_function

from collections import OrderedDict

dict_data = OrderedDict()
dict_data['1'] = "cheng"
dict_data['2'] = "yong"
dict_data['3'] = "qiang"
dict_data['4'] = "forever"
dict_data['5'] = "strong"

for key, value in list(dict_data.items()):
    print(key + ': ' + value)

    if ('3' == key):
        del dict_data[key]

print()

for key, value in list(dict_data.items()):
    print(key + ': ' + value)

/home/yongqiang/miniconda3/envs/pt-1.4_py-3.6/bin/python /home/yongqiang/pytorch_work/end2end-asr-pytorch-example/yongqiang.py
1: cheng
2: yong
3: qiang
4: forever
5: strong

1: cheng
2: yong
4: forever
5: strong

Process finished with exit code 0
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章