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
相关产品推荐
相关产品推荐

