【问题标题】:RuntimeError: OrderedDict mutated during iteration (Python3)RuntimeError:OrderedDict 在迭代期间发生突变(Python3)
【发布时间】:2019-03-04 02:44:45
【问题描述】:

得到标题中提到的错误。下面提到的函数由另一个通过 POST api 调用的函数调用。

错误在打印语句下面的行。不知道错误是什么意思以及为什么会出现。一周前运行的相同代码。

def remove_individual_stops(ordered_parkstop_dict, relevant_data):
    new_ordered_parkstop_dict = ordered_parkstop_dict
    for key, value in ordered_parkstop_dict.items():
        if len(value) == 0:
            for k,v in ordered_parkstop_dict.items():
                if key in v:
                    new_ordered_parkstop_dict.pop(key)
        print (type(ordered_parkstop_dict), ordered_parkstop_dict)
        for k,v in ordered_parkstop_dict.items():
            klist = []
            keylist = []
            if value and v:
                if len(v)==1 and len(value)==1:
                    klist.append(k), keylist.append(key)
                if (keylist == v) and (klist == value and len(value) == 1):
                    new_ordered_parkstop_dict.pop(key)
    return new_ordered_parkstop_dict

【问题讨论】:

标签: python python-3.x


【解决方案1】:

您为new_ordered_parkstop_dict 分配了ordered_parkstop_dict dict 的引用,因此当您迭代ordered_parkstop_dict.items() 并通过弹出它来改变new_ordered_parkstop_dict 时,您也改变了ordered_parkstop_dict,因为您的循环正在迭代ordered_parkstop_dict

您应该将ordered_parkstop_dict 的副本分配给new_ordered_parkstop_dict。变化:

new_ordered_parkstop_dict = ordered_parkstop_dict

到:

new_ordered_parkstop_dict = ordered_parkstop_dict.copy()

【讨论】:

  • 非常感谢。问题已解决,但您能解释一下为什么在上周相同的代码运行时现在弹出错误
  • 错误不一定会发生,因为您将new_ordered_parkstop_dict.pop(key) 放在条件块中,因此使用不同的输入它可能会或可能不会通过满足或不满足条件来触发错误。跨度>
  • 好吧,这很明显,但是如果我告诉你输入也没有变化怎么办。相同的代码部署在另一台服务器上,并且针对相同的输入运行完美。
  • 这很可能是因为另一台服务器正在运行 Python 2.7 或更早版本,允许在迭代 dict 时对其进行变异。
  • 我有疑问,但没有检查正在运行的 python 版本。先生,非常感谢您的帮助。
猜你喜欢
  • 2018-03-04
  • 2019-02-14
  • 2022-01-13
  • 1970-01-01
  • 2019-11-17
  • 2021-10-29
  • 1970-01-01
  • 1970-01-01
  • 2021-12-20
相关资源
最近更新 更多