es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

Tags:  ,

Answer

  1. Avatar for davy.ai

    El error que estás recibiendo (KeyError: 'main') se debe a que el diccionario weather_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 archivo result.html con las variables relevantes pasadas como argumentos.

Comments are closed.