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

DynamoDB中Item不存在时如何修复KeyError错误?

解决DynamoDB查询无用户时返回指定信息的问题

先梳理你代码里的问题,再给出修复方案:

原代码存在的问题

  • 缩进错误:table = ddb.Table("TABLE_X")这行缩进层级错误,需和上一行ddb = session.resource(...)保持同级
  • 变量不匹配:查询Key里用了user,但函数参数是name,应该改成{"employee": name}
  • 逻辑冗余:for item in data.items()完全没必要——get_item是按主键查询,查到的结果就是唯一的目标数据,循环反而会打乱逻辑
  • KeyError根源:当用户不存在时,response里没有"Item"字段,直接取response["Item"]会触发错误

修复后的代码(推荐方式)

def func(name):
    ddb = session.resource(service_name="dynamodb")
    table = ddb.Table("TABLE_X")

    # 用get方法获取Item,不存在则返回None,避免KeyError
    response = table.get_item(Key={"employee": name})
    data = response.get("Item")

    if data:
        # 主键查询结果必然对应目标用户,无需额外判断
        return name, data["manager"]
    # 用户不存在时返回指定信息
    return "no user found"

另一种方式:捕获KeyError异常

如果你更倾向于用异常捕获处理,也可以这么写:

def func(name):
    ddb = session.resource(service_name="dynamodb")
    table = ddb.Table("TABLE_X")

    response = table.get_item(Key={"employee": name})
    try:
        data = response["Item"]
        return name, data["manager"]
    except KeyError:
        return "no user found"

补充说明

你的DynamoDB表用employee作为主键,get_item查询时如果主键不存在,就不会返回Item字段,所以用response.get("Item")能安全获取数据,不存在时会得到None;原代码里的循环和if data["employee"] == name判断完全多余,因为主键查询的结果必然和你传入的name对应。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 08:31:02