You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python字典已添加的键遍历时报KeyError消失的原因是什么

预填充字典后仍触发KeyError的可能原因

以下是该异常的所有常见触发场景:

  • 两次遍历的edges内容不一致
    如果edges是生成器、迭代器而非静态列表,第一次遍历写入字典后迭代器已耗尽,第二次遍历时会重新拉取/生成数据,新生成的元组中包含首次遍历未出现的b值,就会触发报错。此外如果有其他逻辑在两次遍历之间修改了edges列表(追加、删除、修改元组元素),也会出现该问题。
  • 字符串key存在隐形差异
    URL作为字符串key很容易出现肉眼无法识别的差异:比如包含多余的空格、换行、零宽空格,或者存在URL编码差异(比如空格被编码为%20和未编码的版本)、大小写差异(Python字符串比较大小写敏感,域名部分大小写不敏感的规则不会自动生效)。看起来完全相同的两个URL实际是不同的字符串,自然无法匹配到已写入的key。
    可以用下述代码验证该问题:
    err_key = 'https://support.google.com/chrome/answer/185277'
    # 对比所有key和报错key的实际值
    for k in nodes:
        if k.strip() == err_key.strip():
            print(f"存储key: {repr(k)} 报错key: {repr(err_key)} 是否相等: {k == err_key}")
    
  • 并发修改字典
    如果你的代码运行在多线程/多协程环境下,有其他逻辑在两次遍历之间删除了nodes中的对应key,或者写入时出现了竞争条件导致该key未实际写入成功,也会触发KeyError。
  • 遍历过程中意外修改了字典
    如果你实际运行的代码在两次遍历之间有弹出key、重写key值之外的逻辑意外删除了对应key,也会出现该问题。

内容的提问来源于stack exchange,提问作者Tristan Bilot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 18:24:07