KeyError 异常的值用单引号括起来

KeyError exception's value is surrounded by single quotes

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

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 的值时必须删除单引号 '?有更好的方法吗?

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

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

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