调用带参数的Python Lambda函数遇内部服务器错误求助
问题分析与修复方案
你的Lambda函数触发内部服务器错误,核心问题在于Lambda函数URL的POST请求数据结构和控制台测试的结构不一致:
- 控制台测试时,你直接将
temp放在了event根节点,所以代码能正常取值 - 但通过POST请求发送JSON时,请求体内容会被包装在
event['body']字段中,且该字段是字符串格式,并非直接的JSON对象
修复后的代码
import json def lambda_handler(event, context): # 解析POST请求的body内容 if 'body' in event: try: body = json.loads(event['body']) temp = body["temp"] except (json.JSONDecodeError, KeyError): return { 'statusCode': 400, 'body': json.dumps('请求格式错误:缺少temp参数或JSON格式无效') } else: # 兼容控制台测试或无body的请求场景 temp = event.get("temp", "默认值") return { 'statusCode': 200, # 注意:原代码中写的是小写c的statuscode,这是不符合规范的错误写法 'body': json.dumps(f'Hello from {temp}!') }
额外注意事项
- 原返回字段
statuscode(小写c)不符合Lambda响应规范,正确写法是statusCode(大写C),这个错误也会导致响应异常 - 添加异常处理可以避免因请求格式错误触发崩溃,同时返回友好的错误提示
- 如果是GET请求,查询参数会存放在
event['queryStringParameters']中,比如curl https://xxxx.lambda-url.us-east-1.on.aws?temp=test,需要通过event['queryStringParameters'].get('temp')获取参数
内容的提问来源于stack exchange,提问作者Suraj
相关产品推荐
相关产品推荐

