Как исправить «KeyError» при поиске ответов API? - PullRequest
0 голосов
/ 06 мая 2019

Я создаю приложение погоды.Я пытаюсь получить данные о погоде из 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 голосов
/ 06 мая 2019

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
0 голосов
/ 06 мая 2019

Очевидно, что ответ возвращает массив json, в котором словарь с индексом 0 не имеет ключа с именем max. Что выводится при печати weather?

...