症状
遍历字典或集合的循环抛出 RuntimeError: dictionary changed size during iteration(或 Set 版本),通常只在执行修改的那个分支上出现。
诊断
在循环中定位修改操作:
for key in my_dict:
if not wanted(key):
del my_dict[key] # raises RuntimeError
用 pop 做最小复现可确认该模式;对 defaultdict 的读取也可能隐式插入键。
修复
遍历快照,或把删除推迟到循环之后:
for key in list(my_dict):
if not wanted(key):
del my_dict[key]
# or build a new dict
my_dict = {k: v for k, v in my_dict.items() if wanted(k)}
验证
重新运行并断言最终的键与大小,确认错误消失且容器内容符合预期。