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
相关产品推荐
相关产品推荐

