Hola, estaba terminando un ejemplo en kivy y me pensé en el otro que hice, el del clima. Y si no me equivoco fue tan simple y tonta lo que; creo; fue la solución. El archivo se llamaba en mi caso: tiempo.py. Lo que hice fue cambiarlo a main.py y lo probé unas cuantas veces y funcionó. El código sigue intacto, solo cambié el nombre. Saludos
El lun., 6 jul. 2020 a las 10:18, lemarchand8679 (<lemarchand8...@gmail.com>) escribió: > Hola Sebastián, si para cada proyectito le creo una carpeta. Alguna que > otra vez usé para debugear. > También vi que le puedo decir a PyCharm que omita cosas que están bien y > que me marca para que las arregle. Pero mi duda es la siguiente, si yo le > digo que esa línea de código está bien, ese cambio aplica a lo que venga? > Porque puede que por configurarlo así después no me marque cosas que me > resulten importantes. > Saludos > > > > Enviado desde mi smartphone Samsung Galaxy. > > > -------- Mensaje original -------- > De: Sebastián Arancibia <cibers...@gmail.com> > Fecha: 6/7/20 04:13 (GMT-03:00) > A: La lista de python en castellano <python-es@python.org> > Asunto: Re: [Python-es] [Consulta] Sobre keyerror > > Hola Verónica (y a todos), > > Ahora ya con las herramientas adecuadas, y ya que estás usando PyCharm, te > recomiendo que incluyas tu desarrollo dentro de un main. Así podrás > ejecutar y debuggear tu proyecto. Cuando incluyes todo dentro de un main > puedes ejecutarlo con el botón "play", y arriba te sale el nombre del > script y varios botones: play, debug, correr tests y uno de stop. El > segundo te permite debuggear y puedes marcar puntos de quiebre al costado > de cada linea. Abajo te salen los valores de las variables, es mucho más > fácil a la hora de diagnosticar errores, ver los valores de las variables > en todo momento y cosas así. > > [image: image.png] > > Como aún no logro que me funcione la api key me sigue saliendo el mismo > error de ayer, y se cae por eso. Después investigaré más y generaré otra > api key para ver otros errores que aparezcan. > > Saludos. > > > On Fri, Jul 3, 2020 at 2:03 PM Alexis Roda < > alexis.roda.villalo...@gmail.com> wrote: > >> Haz este cambio: >> >> print(complete_url) # <<< añade esta línea >> response = requests.get(complete_url) >> >> >> Copia/pega lo que sale por pantalla. >> >> >> Missatge de lemarchand8679 <lemarchand8...@gmail.com> del dia dv., 3 de >> jul. 2020 a les 19:40: >> >>> 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. >>> >>> >>> Saludos >>> >>> Missatge 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_ciudad >>>>> >>>>> >>>>> al 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 >>>>> <http://api.openweathermap.org/data/2.5/weather?q=sp>" >>>>> 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.html >>>>> >>>>> Creo que es excesivo para este problema pero es otra herramienta que >>>>> puede ser útil. >>>>> >>>>> >>>>> Saludos >>>>> >>>>> Missatge 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. >>>>>> Saludos >>>>>> >>>>>> El 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 requests >>>>>>>> import json >>>>>>>> >>>>>>>> api_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_ciudad >>>>>>>> >>>>>>>> response = 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.py >>>>>>>> Ingrese nombre de la ciudad: Rosario >>>>>>>> Traceback (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/ >>>>>>>> <https://www.geeksforgeeks.org/python-find-current-weather-of-any-city-using-openweathermap-api/> >>>>>>>> >>>>>>>> Saludos y gracias >>>>>>>> >>>>>>>> >>>>>>>> El 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 >>> >> _______________________________________________ >> 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