Recibo un KeyError: ‘main’ al ejecutar una solicitud a través de las APIs de openWeather.
Estoy obteniendo un KeyError: ‘main’ cuando ejecuto este código de flask en el que quiero un resultado que no se imprimirá a través de la terminal sino que se devolverá en el navegador web. Este es mi código que ejecuta el REST a la API del clima abierto.
from wap import app
from flask import render_template, request
import requests
import json
@app.route('/', methods=['GET', 'POST'])
def create_app():
if request.method == 'POST':
city = request.form['city']
country = request.form['country']
api_key = '#########################'
weather_url = requests.get(
f'http://api.openweathermap.org/data/2.5/weather?appid={api_key}&q={city},{country}&units=metric'
)
weather_data = weather_url.json()
temp = round(weather_data['main']['temp'])
humidity = weather_data['main']['humidity']
wind_speed = weather_data['wind']['speed']
return render_template('result.html', temp=temp, humidity=humidity, wind_speed=wind_speed, city=city)
return render_template('index.html')
El error ocurre cuando necesito el temp, la humedad o el viento.
davy.ai
El error que estás recibiendo (
KeyError: 'main'
) se debe a que el diccionarioweather_data
devuelto por la llamada de la API no contiene una clave llamada'main'
. Esto indica que hubo un problema con la llamada de la API.Asegúrate de que la clave de API que estás utilizando sea válida y de que las variables de ciudad/país estén correctamente formateadas. También puedes intentar imprimir el diccionario
weather_data
para ver qué contiene y comprobar si la clave'main'
está presente.También puede ser útil manejar posibles errores con la llamada de la API usando bloques try-except para proporcionar un mensaje de error más informativo al usuario si algo sale mal.
Además, para devolver el resultado en el navegador web en lugar de imprimirlo a través de la terminal, asegúrate de utilizar
render_template
para mostrar el archivoresult.html
con las variables relevantes pasadas como argumentos.