Hice como me habían comentado antes, lo de hacer print en x. Lo hice y da el 
erroe de 401 el cual hace referencia a la api_key. Lo revisé y parece estar 
correcta, está validada y todo. Probé generando otra y lo mismo; 
keyerror.Enviado desde mi smartphone Samsung Galaxy.
-------- Mensaje original --------De: Alexis Roda 
<alexis.roda.villalo...@gmail.com> Fecha: 3/7/20  11:19  (GMT-03:00) A: La 
lista de python en castellano <python-es@python.org> Asunto: Re: [Python-es] 
[Consulta] Sobre keyerror Tiendo a dar demasiada información y perderme en 
detalles. La parte relevante de mi respuesta es cuando digo que el número 404 y 
la cadena "404" comparan como distintos. En Python, si comparas un número (un 
int) y una cadena (un str) el resultado es que siempre son distintos, 
independientemente de su valor. Esto implica que la rama del else jamás se 
ejecuta, no importa qué código de respuesta devuelve la API, siempre se ejecuta 
la rama del then. Esto es un problema cuando la respuesta es no-OK y no 
contiene la clave "main".Lo puedes confirmar fácilmente inspeccionando el valor 
de x. Si estoy en lo cierto verás algo como {"cod": 123, ...} no {"cod": "123", 
 ...}. La confirmación definitiva sería la documentación de la API, la 
especificación del formato de la respuesta.Con "la forma correcta" quería decir 
"la forma recomendada". requests ofrece mecanismos para hacer lo mismo de forma 
más sencilla y robusta. Ya que se importa se me hace extraño no 
aprovecharlos.También te recomiendo que revises la gestión de errores, parece 
frágil. Imagino que si el código de respuesta es distingo de 404 no significa 
necesariamente que la petición ha ido bien. Confirmalo con la documentación de 
la API.SaludosMissatge de Lemarchand Barker <lemarchand8...@gmail.com> del dia 
dv., 3 de jul. 2020 a les 13:36:Buenas gracias a todos por sus aportes. Si, me 
llamo Verónica.En respuesta a Alexis, puede ser una forma incorrecta de 
realizar la consulta pero cuando hice copy-paste, al probar con distintas 
localidades funcionó. Tengo que mirar la info para desarrolladores que tiene 
más detenidamente, no es larga.Yo al 404 lo entiendo como el de page not found, 
de ahí que el else te diga que no encontró la ciudad. No encuentra la página 
con la información de esa localidad.El vie., 3 de jul. de 2020 04:33, Alexis 
Roda <alexis.roda.villalo...@gmail.com> escribió:Si python dice "KeyError: 
main" al ejecutar y = x["main"] es que x no tiene la clave "main". Averigua el 
valor de x, tal vez te dé una pista del problema.En el otro mensaje, al cambiar 
"main" por "cod" el error era "int value is not subscriptable" (o algo 
parecido), eso nos dice que el valor asociado a la clave "cod" es un número 
(habría que confirmarlo con la documentación de la API) pero el programa lo 
trata como una cadena (en el if x["cod"] != "404"). El número 404 y la cadena 
"404" comparan como distintos. No sé si tiene que ver con el KeyError main pero 
es un error que habría que corregir. Relacionado con esto, no parece buena idea 
asumir que si el código es distinto de 404 la petición ha ido bien. Asumiendo 
que sean códigos HTTP yo haría algo como: si cod == 200 procesamiento ok sino 
si cod == 404 imprime "no encontrado" ... sino imprime "error desconocido".Me 
llama la atención que el script utilice el paquete requests para luego acabar 
construyendo la URL a mano. Por otro lado la URL que construye no parece muy 
correcta. Suponiendo que nombre_ciudad sea FOO:url = 
"http://api.openweathermap.org/data/2.5/weather?q=sp"complete_url = url + 
"appid=" + api_key + "&q=sp" + nombre_ciudadal final complete_url vale 
http://api.openweathermap.org/data/2.5/weather?q=spappid=API_KEY&q=spFOO. Creo 
que deberia ser algo mas parecido a 
http://api.openweathermap.org/data/2.5/weather?q=FOO&appid=API_KEY&lang=sp.Usando
 requests de forma correcta te quitas problemas:url = 
"http://api.openweathermap.org/data/2.5/weather"response = requests.get(url, 
data={"q": nombre_ciudad, "lang": "sp", "appid": api_key})añadirá el ? y los & 
donde corresponda, codificará correctamente los valores y no quedarán valores 
"desparejados" ni claves duplicadas.Visto todo esto sigo pensando que el 
problema es una mala petición a la API que devuelve un código de error que no 
es gestionado correctamente.Respecto a que el problema se produzca cuando 
escribes el programa a mano y que funciona si copias/pegas. En caso que no sea 
un error evidente en la transcripción y que el valor de x no te dé ninguna 
pista, los IDE suelen incluir alguna herramienta para comparar archivos. 
Comparalos y encuentra que los hace diferentes y puede causar el 
problema.https://www.jetbrains.com/help/pycharm/comparing-files-and-folders.htmlCreo
 que es excesivo para este problema pero es otra herramienta que puede ser 
útil.SaludosMissatge de Lemarchand Barker <lemarchand8...@gmail.com> del dia 
dv., 3 de jul. 2020 a les 1:22:Hola, el código de api key funciona, porque me 
registré y lo usé y funcionó.Lo de sp fue más que nada para probar, corresponde 
al Multilingual support. Incluso cuando hice copy-paste del código sin usar el 
sp, funcionaba perfecto. Lo saqué de acá: https://openweathermap.org/current. 
Lo del multilingual está ya casi al final de la página.La url que uso es esta: 
api.openweathermap.org/data/2.5/weather? que es la misma que figura en la 
página. Reitero, el problema me salta cada vez que copio el código de forma 
manual, con copy-paste ningún problema.SaludosEl jue., 2 jul. 2020 a las 20:00, 
David Suárez vía Python-es (<python-es@python.org>) escribió:Vero,el problema 
que veo es que tienes la cadena "sp" de sobra tanto en la variable url como 
cuando generas complete_url y creo que no deberían ir allí, aunque no he podido 
checarlo por lo de la llave API.El jue., 2 de jul. de 2020 a la(s) 17:30, 
Lemarchand Barker (lemarchand8...@gmail.com) escribió:Hola, este es mi 
código:import requestsimport jsonapi_key = "API_KEY"url = 
"http://api.openweathermap.org/data/2.5/weather?q=sp"nombre_ciudad = 
input("Ingrese nombre de la ciudad: ")complete_url = url + "appid=" + api_key + 
"&q=sp" + nombre_ciudadresponse = requests.get(complete_url)x = 
response.json()if x["cod"] != "404":    y = x["main"]    temperatura_actual = 
y["temp"]    celsius = temperatura_actual - 273.15    presion_actual = 
y["pressure"]    humedad_actual = y["humidity"]    z = x["clima"]    
descripcion = z[0]["descripcion"]    print(f"Temperatura: {celsius}°")    
print(f"Presión atmosférica: {presion_actual} hPa")    print(f"Humedad: 
{humedad_actual} %")    print(f"Descripción: {descripcion}")else:    
print("Ciudad no encontrada")La salida es la siguiente:/usr/bin/python3.8 
/home/raiden/Programacion/weather/weather.pyIngrese nombre de la ciudad: 
RosarioTraceback (most recent call last):  File 
"/home/raiden/Programacion/weather/weather.py", line 18, in <module>    y = 
x["main"]KeyError: 'main'El código original es este: 
Python-find-current-weather-of-any-city-using-openweathermap-api/Saludos y 
graciasEl jue., 2 jul. 2020 a las 18:20, Gerardo Diez 
(<gerardo.diez.gar...@gmail.com>) escribió:>> Hola,>> No soy precisamente un 
experto, pero yo normalmente voy poniendo prints /liga por todos lados para que 
me vaya mostrando el contenido de las cadenas.>> No recuerdo muy bien el 
funcionamiento de input pero puede ser que el string que se esté incorporando 
lleve un salto de línea final ( \n)?>> Si es así mira la función strip>> Un 
saludo>> El jue., 2 jul. 2020 22:01, lemarchand8679 <lemarchand8...@gmail.com> 
escribió:>>>> Hola, había escrito para comentar que había solucionado el 
inconveniente de KeyError, y es cierto en parte. Digo en parte porque si 
escribo desde 0 para hacer algunas modificaciones, me tira ese error al 
introducir una ciudad, y si hago un copy-paste del código funciona y la verdad 
no se por qué, alguna idea? Gracias>>>>>>>> Enviado desde mi smartphone Samsung 
Galaxy.>>>> _______________________________________________>> Python-es mailing 
list>> Python-es@python.org>> 
https://mail.python.org/mailman/listinfo/python-es>> 
_______________________________________________> Python-es mailing list> 
Python-es@python.org> https://mail.python.org/mailman/listinfo/python-es
_______________________________________________
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es

_______________________________________________
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es

_______________________________________________
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es

_______________________________________________
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es

_______________________________________________
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es

_______________________________________________
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es

Responder a