在处理API响应搜索时如何解决“ KeyError”问题?

时间:2019-05-06 06:31:45

标签: python json api request response

我正在创建天气应用。我正在尝试从API中提取天气数据。从列表执行检索时,我收到KeyError。我弄模糊了我的API密钥。

我尝试将密钥设置为多个不同的数字并将其完全删除。 “ max”是api的一部分。

city = 'Syracuse'
state = 'NY'
url = ('https://api.openweathermap.org/data/2.5/forecast?q=%s,3166-2:US-%s&APPID=**********' % (city,state))
response = requests.get(url)
weatherdata = response.json()
weatherdata
low = weatherdata[0]['temp_min']

该错误发生在第7行并显示

KeyError                                  Traceback (most recent call last)
<ipython-input-52-18029d6f472d> in <module>
     25 weatherdata
     26 
---> 27 low = weatherdata[0]['temp_min']

KeyError: 0

以下是响应的示例。这只是返回值的一小部分。

{'cod': '200',
 'message': 0.0072,
 'cnt': 40,
 'list': [{'dt': 1557133200,
   'main': {'temp': 282.03,
    'temp_min': 279.7,
    'temp_max': 282.03,
    'pressure': 1013.3,
    'sea_level': 1013.3,
    'grnd_level': 989.64,
    'humidity': 96,
    'temp_kf': 2.33},
   'weather': [{'id': 800,
     'main': 'Clear',
     'description': 'clear sky',
     'icon': '01n'}],
   'clouds': {'all': 5},
   'wind': {'speed': 0.96, 'deg': 270.837},
   'sys': {'pod': 'n'},
   'dt_txt': '2019-05-06 09:00:00'},

我希望将当天的最高温度设置为“高温”,并希望能够在白天的低温,湿度和其他条件下重复此过程。因此,将错误设置为较高的值,而不是错误,然后我可以稍后打印或使用它。

2 个答案:

答案 0 :(得分:0)

很明显,响应返回一个json数组,其中索引0的字典没有名为max的键。打印weather时输出什么?

答案 1 :(得分:0)

API:https://samples.openweathermap.org/data/2.5/forecast/daily?id=524901&lang=us&appid=b6907d289e10d714a6e88b30761fae22

代码

import requests

url = ('https://samples.openweathermap.org/data/2.5/forecast/daily?id=524901&lang=us&appid=b6907d289e10d714a6e88b30761fae22')
response = requests.get(url)
weatherdata = response.json()

print "JSON Response :", weatherdata
high = weatherdata['list'][0]['temp']['max']
print "max", max

输出

JSON Response : {u'city': {u'name': u'Moscow', u'country': u'RU', u'lon': 37.6156, u'geoname_id': 524901, u'iso2': u'RU', u'lat': 55.7522, u'type': u'city', u'population': 0}, u'message': 0, u'list': [{u'clouds': 0, u'temp': {u'min': 261.41, u'max': 262.65, u'eve': 262.65, u'morn': 262.65, u'night': 261.41, u'day': 262.65}, u'snow': 0.01, u'humidity': 76, u'pressure': 1024.53, u'weather': [{u'main': u'Clear', u'id': 800, u'icon': u'01d', u'description': u'sky is clear'}], u'dt': 1485766800, u'speed': 4.57, u'deg': 225}, {u'clouds': 88, u'temp': {u'min': 260.98, u'max': 265.44, u'eve': 264.18, u'morn': 261.46, u'night': 265.44, u'day': 262.31}, u'snow': 1.44, u'humidity': 91, u'pressure': 1018.1, u'weather': [{u'main': u'Snow', u'id': 600, u'icon': u'13d', u'description': u'light snow'}], u'dt': 1485853200, u'speed': 4.1, u'deg': 249}, {u'clouds': 64, u'temp': {u'min': 266.9, u'max': 270.59, u'eve': 269.66, u'morn': 266.9, u'night': 268.06, u'day': 270.27}, u'snow': 0.92, u'humidity': 92, u'pressure': 1010.85, u'weather': [{u'main': u'Snow', u'id': 600, u'icon': u'13d', u'description': u'light snow'}], u'dt': 1485939600, u'speed': 4.53, u'deg': 298}, {u'clouds': 0, u'temp': {u'min': 255.19, u'max': 264.02, u'eve': 259.68, u'morn': 263.38, u'night': 255.59, u'day': 263.46}, u'humidity': 84, u'pressure': 1019.32, u'weather': [{u'main': u'Clear', u'id': 800, u'icon': u'01d', u'description': u'sky is clear'}], u'dt': 1486026000, u'speed': 3.06, u'deg': 344}, {u'clouds': 45, u'temp': {u'min': 256.55, u'max': 266, u'eve': 260.09, u'morn': 266, u'night': 256.55, u'day': 265.69}, u'snow': 0.21, u'humidity': 0, u'pressure': 1012.2, u'weather': [{u'main': u'Snow', u'id': 600, u'icon': u'13d', u'description': u'light snow'}], u'dt': 1486112400, u'speed': 7.35, u'deg': 24}, {u'clouds': 29, u'temp': {u'min': 254.73, u'max': 259.95, u'eve': 254.73, u'morn': 257.02, u'night': 257.13, u'day': 259.95}, u'humidity': 0, u'pressure': 1029.5, u'weather': [{u'main': u'Clear', u'id': 800, u'icon': u'01d', u'description': u'sky is clear'}], u'dt': 1486198800, u'speed': 2.6, u'deg': 331}, {u'clouds': 46, u'temp': {u'min': 259.11, u'max': 263.13, u'eve': 261.32, u'morn': 259.11, u'night': 262.01, u'day': 263.13}, u'snow': 0.04, u'humidity': 0, u'pressure': 1023.21, u'weather': [{u'main': u'Snow', u'id': 600, u'icon': u'13d', u'description': u'light snow'}], u'dt': 1486285200, u'speed': 5.33, u'deg': 234}], u'cod': u'200', u'cnt': 7}
max 262.65