首页 > 解决方案 > KeyError 异常的值用单引号括起来

问题描述

为了提供更好的 API 错误,KeyError如果 API 请求中缺少特定键,我会引发异常。

user = {
    "id": 1234,
    "name": "John Doe"
}

try:
    user.pop("id") // for example purpose
    user_id = user["id"]
    print(user_id)
except KeyError as e:
    key_error_message = {
        "id": "Key 'id' is missing",
        "name": "Key 'name' is missing"
    }
    print(e) # 'id'
    print(type(e)) # <class 'KeyError'>
    print(str(e)) # 'id'
    print(type(str(e))) # <class 'str'>
    print(key_error_message.get(str(e))) # None
    print(key_error_message.get(str(e).replace("'", ""))) # Key 'id' is missing

我想知道为什么'在尝试访问 KeyError 的值时必须删除单引号?有没有更好的方法来做到这一点?

我知道使用方法肯定有更好的.get()方法,dict但这是我的代码中的实际行为,我不想完全重构它。

标签: pythonkeyerror

解决方案


使用该args字段访问导致异常的键名:

try:
    ....
except KeyError as e:
    missing_key = e.args[0]
    print(f"Key '{missing_key}' is missing")

推荐阅读