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

Python中KeyError参数是否有需遵循的规则?官方文档未明确说明

KeyError的args[0]是否为必须遵守的规则?

通常情况下,KeyError的参数(err.args[0])就是导致查找失败的键(下方附演示示例)。但这是不是一条必须遵守的规则?KeyError的官方文档里没提到这个参数的相关内容,会不会相关规定写在别的文档里?

相关代码

try:
    item = mapping[key]
except KeyError:
    # each error will be logged, a meaningful message should be provided
    raise KeyError(f"Item {key} was not found in something") from None

演示示例

empty = {}
for key in 42, "abc", True, None, 3.14, ('tu','ple'):
    try:
        empty[key]
    except KeyError as err:
        assert err.args[0] == key 
        print(f"{key} not found")

这并不是一条强制遵守的规则,但这是Python内置容器类型(比如dict、set)抛出KeyError时的约定俗成的行为。

Python官方文档虽然没有明确规定KeyError必须将缺失的键作为第一个参数,但内置类型实现都遵循了这个模式。不过需要注意:

  • 自定义类如果实现了__getitem__方法并抛出KeyError,完全可以不遵循这个约定——你可以传入任意参数,甚至不传参数。
  • 如果你自己主动抛出KeyError(比如示例中的代码),也可以自由定义错误信息,不一定非要把键放在args[0]里。

但从代码兼容性和可读性角度来说,遵循这个约定会更友好:其他开发者在捕获你的KeyError时,会习惯通过err.args[0]获取缺失的键;同时,调试工具、日志系统也能更直观地展示错误原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 12:25:58