首页 > 解决方案 > 在 python 中修改字典时出现意外行为

问题描述

我试图在迭代字典对象时对其进行修改。但是python会提出一个RuntimeError说法,dictionary changed size during iteration以避免意外行为(这是意料之中的)。

>>> a = {1: 2, 2: 3}
>>> for key in a:
...     if key % 2 == 0:
...             a.pop(key)
...
3
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
RuntimeError: dictionary changed size during iteration

但真正让我惊讶的是,即使上面的代码块与RuntimeError字典一起退出,a也被修改了。

>>> a
{1: 2}

这是为什么?。这种行为是否记录在某处?

下面是我的python版本和实现。

>>> import sys, platform
>>> sys.version_info
sys.version_info(major=3, minor=8, micro=0, releaselevel='final', serial=0)
>>> platform.python_implementation()
'CPython'

标签: python-3.xdictionaryruntime-errorcpythonpython-internals

解决方案


我相信原因是因为在弹出项目后,for尝试移动到下一个键值时循环失败。换句话说,错误发生在删除键值对之后。在这里查看答案


推荐阅读