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")
为了提供更好的 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")