У меня есть приложение flask, и я пытаюсь выяснить, почему один из моих маршрутов не работает. Не думаю, что проблема в маршруте. Ошибка возникает при вызове функции, которая включает запрос API.
Вот маршрут:
@app.route("/weather_forecast/<climbing_area>/<city_id>/<lat>/<lon>/<weather_site>")
def weather_forecast(climbing_area, city_id, lat, lon, weather_site):
sites = db.create_site_list_sqlite()
daily_forecast = wf.format_daily_forecast(city_id)
extended_forecast = wf.format_extended_forecast(city_id)
historical_forecast = wf.get_historical_weather(lat, lon)
dates = wf.get_date_range()
return render_template('weather_forecast.html',
climbing_area=climbing_area,
city_id=city_id,
daily_forecast=daily_forecast,
extended_forecast=extended_forecast,
historical_forecast=historical_forecast,
dates=dates,
lat=lat,
lon=lon,
weather_site=weather_site,
sites=sites,
wf=wf)
Моя ошибка связана со строкой daily_forecast = wf.format_daily_forecast(city_id)
Эта строка использует ключ API для запроса данных о погоде из https://openweathermap.org/api в зависимости от местоположения, указанного в аргументе city_id.
Вот полное сообщение об ошибке из журнала ошибок:
[2020-08-04 12:28:17,529] ERROR in app: Exception on /weather_forecast/American Fork/5779334/40.42/-111.97/Orem [GET]
Traceback (most recent call last):
File "/home/epurpur/ClimbingWeatherAppFlask/venv/lib/python3.8/site-packages/flask/app.py", line 2447, in wsgi_app
response = self.full_dispatch_request()
File "/home/epurpur/ClimbingWeatherAppFlask/venv/lib/python3.8/site-packages/flask/app.py", line 1952, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/home/epurpur/ClimbingWeatherAppFlask/venv/lib/python3.8/site-packages/flask/app.py", line 1821, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/home/epurpur/ClimbingWeatherAppFlask/venv/lib/python3.8/site-packages/flask/_compat.py", line 39, in reraise
raise value
File "/home/epurpur/ClimbingWeatherAppFlask/venv/lib/python3.8/site-packages/flask/app.py", line 1950, in full_dispatch_request
rv = self.dispatch_request()
File "/home/epurpur/ClimbingWeatherAppFlask/venv/lib/python3.8/site-packages/flask/app.py", line 1936, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/home/epurpur/ClimbingWeatherAppFlask/weather_app_main.py", line 46, in weather_forecast
daily_forecast = wf.format_daily_forecast(city_id)
File "/home/epurpur/ClimbingWeatherAppFlask/weather_forecast.py", line 49, in format_daily_forecast
todays_data = extended_forecast_data[0]['list']
KeyError: 'list'
Опять же, функция daily_forecast
, которая использует ключ API для получения данных о погоде, упоминается в журнале ошибок:
File "/home/epurpur/ClimbingWeatherAppFlask/weather_app_main.py", line 46, in weather_forecast
daily_forecast = wf.format_daily_forecast(city_id)
Но я не знаю почему? При локальном запуске приложения проблем нет. Должно быть что-то еще, что я смотрю?
Хотя последнее сообщение в журнале ошибок - это todays_data = extended_forecast_data[0]['list']
, этот список не существует, потому что нет данных, возвращенных из вызова API, в приведенном выше упомянуто daily_forecast
шаг