我正在尝试将天气数据从 AWS lambda 返回到 Lex 机器人。我遇到了keyerror

Posted

技术标签:

【中文标题】我正在尝试将天气数据从 AWS lambda 返回到 Lex 机器人。我遇到了keyerror【英文标题】:I am trying to return weather data from AWS lambda to Lex bot. I am coming across keyerror 【发布时间】:2021-01-23 16:39:22 【问题描述】:
import json
from botocore.vendored import requests
#import requests

def weatherfunc(city_name):

    api_key = 'e914e5e16947fe541140de82a88e5888'
    base_url = 'http://api.openweathermap.org/data/2.5/weather?'
    finalurl = base_url + 'appid=' + api_key + '&q=' + city_name

    response = requests.get(finalurl)
    x = response.json()
    y = x['main']
    current_temperature = y['temp']
    current_pressure = y['pressure']
    current_humidiy = y['humidity']
    z = x['weather']
    weather_description = z[0]['description']

    return 
        'current temp': current_temperature,
        'humidity': current_humidiy,
        'pressure': current_pressure,
        'description': weather_description,
        

 def lambda_handler(event, context):
    city = event['City']
    a = weatherfunc(city)
    return (a)

我想将天气信息返回给我的 lex 机器人,但遇到了错误: 回复: "errorMessage": "'城市'", "errorType": "KeyError", “堆栈跟踪”: [ " 文件 "/var/task/lambda_function.py",第 28 行,在 lambda_handler\n city = event['City']\n" ]

请帮我解决错误。

【问题讨论】:

【参考方案1】:

根据报错信息:

您调用 lambda_handler(在 lambda_handler 中) ...该函数遇到KeyError ("errorType": "KeyError") ...line 28,即:city = event['City'](第 28 行,city = event['City'])

KeyError python doc 上进行 30 秒的 google 搜索,您将看到 this 记录 KeyError 的网站。

本网站第一行相关内容为:Raised when a mapping (dictionary) key is not found in the set of existing keys.

【讨论】:

【参考方案2】:

请检查请求中传递的事件内容,以正确获取城市名称。如果您从 lex 的事件内容中获取 City... 可能是这样的 - city = event['currentIntent']['slot']['city']。请参考活动内容。

【讨论】:

这最好是作为评论而不是答案。

以上是关于我正在尝试将天气数据从 AWS lambda 返回到 Lex 机器人。我遇到了keyerror的主要内容,如果未能解决你的问题,请参考以下文章

AWS Lambda 返回权限被拒绝尝试从 S3 存储桶获取对象

AWS Lambda RDS 连接超时

如何从 AWS Lambda 返回 1*1 像素作为响应? [复制]

从 Java AWS lambda API 响应中的字节数组返回图像

从 Lambda 调用 AWS AppSync graphql API

将 Lambda 函数添​​加到 AWS AppSync 数据源?