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

Python如何写if条件判断Lambda的event对象是否包含body元素

问题原因

直接使用event["body"]访问字典键时,如果键不存在Python会直接抛出KeyError,这是报错的核心原因。同时原有代码的else分支存在逻辑错误:其他Lambda调用时传入的event本身就是Python字典类型,不能用json.loads()解析,会触发类型错误。


修复后完整代码

from modules.ZabbixSender import ZabbixSender
import json

def lambda_handler(event, context):
    
    print(event)

    # 优先判断body是否存在且不为空
    if event.get("body") is not None:
        requestBody = json.loads(event["body"])
    else:
        # 跨Lambda调用时event本身就是已解析的字典,无需反序列化
        requestBody = event
        
    print(requestBody)

    Host = requestBody['Host']
    Key = requestBody['Key'] 
    Value = requestBody['Value']

    sender = ZabbixSender("10.10.10.10", 10051)
    sender.add(Host, Key, Value)
    sender.send()
    
    return {
        "statusCode": 200,
        "headers": {
            "Content-Type": "application/json"
        },
        "body": json.dumps({
            "Host": Host,
            "Key" : Key,
            "Value" : Value,
            "Status": "Successfully updated Zabix Server"
        })
    }

修改说明

  • 使用字典的get()方法访问body键,键不存在时会返回默认值None,不会抛出异常
  • 移除了else分支的json.loads(event)操作,跨Lambda调用时传入的event已经是解析完成的字典,直接使用即可
  • 同时兼容API Gateway/Curl调用(body为JSON字符串)和跨Lambda调用(无body,参数直接放在event根层级)两种场景

如果需要更健壮的实现,可以额外增加参数存在性校验,避免requestBody缺少Host/Key/Value时抛出异常:

# 加在requestBody赋值之后即可
required_fields = ["Host", "Key", "Value"]
if not all(field in requestBody for field in required_fields):
    return {
        "statusCode": 400,
        "headers": {"Content-Type": "application/json"},
        "body": json.dumps({"error": "缺少必填参数"})
    }

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 14:24:03