[Python-es] [Consulta] KeyError: 'main'

2020-07-02 Por tema Lemarchand Barker
Hola, estoy teniendo un inconveniente a la hora de correr un programa.

El código es este:

base_url = "http://api.openweathermap.org/data/2.5/weather?q=";

city_name = input("Ingrese nombre de la ciudad: ")

complete_url = base_url + "appid=" + api_key + "&q=" + city_name

response = requests.get(complete_url)

x = response.json()

if x["cod"] != "404":
y = x['main']
# y = x["cod"]
current_temperature = y["temp"]
current_pressure = y["pressure"]
current_humidiy = y["humidity"]
z = x["weather"]
weather_description = z[0]["description"]

print(
"Temperature (in centigrade unit) = " +
str(current_temperature) +
"\n atmospheric pressure (in hPa unit) = " +
str(current_pressure) +
"\n humidity (in percentage) = " +
str(current_humidiy) +
"\n description = " +
str(weather_description)
)
else:
print(" Ciudad no encontrada ")

El problema se da cuando intento ingresar una ciudad. Probé con la mía
Corrientes (Argentina) y me da KeyError, probé con otra localidad y es lo
mismo.
La salida es la siguiente:

/usr/bin/python3.8 /home/raiden/Programacion/weather/tiempo.py
Ingrese nombre de la ciudad: London
Traceback (most recent call last):
  File "/home/raiden/Programacion/weather/tiempo.py", line 18, in 
y = x['main']
KeyError: 'main'

Leí que generalmente ese error se debe a que no encuentra el path o no
existe. Probé cambiar en la línea 18 el "main" por "cod" y el error ya es
otro. Es el siguiente:

/usr/bin/python3.8 /home/raiden/Programacion/weather/tiempo.py
Ingrese nombre de la ciudad: London
Traceback (most recent call last):
  File "/home/raiden/Programacion/weather/tiempo.py", line 20, in 
current_temperature = y["temp"]
TypeError: 'int' object is not subscriptable

Asi que por eso comenté la línea como se ve en el código, porque me parece
que mi problema es con main.

El código original es este:
Python-find-current-weather-of-any-city-using-openweathermap-api/


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


Re: [Python-es] [Consulta] KeyError: 'main'

2020-07-02 Por tema Lemarchand Barker
Ya logré solucionarlo, ahora tengo que cambiar para que la temperatura la
muestre en celsius.
Cerrado :)

El jue., 2 jul. 2020 a las 11:44, Lemarchand Barker (<
lemarchand8...@gmail.com>) escribió:

> Hola, estoy teniendo un inconveniente a la hora de correr un programa.
>
> El código es este:
>
> base_url = "http://api.openweathermap.org/data/2.5/weather?q=";
>
> city_name = input("Ingrese nombre de la ciudad: ")
>
> complete_url = base_url + "appid=" + api_key + "&q=" + city_name
>
> response = requests.get(complete_url)
>
> x = response.json()
>
> if x["cod"] != "404":
> y = x['main']
> # y = x["cod"]
> current_temperature = y["temp"]
> current_pressure = y["pressure"]
> current_humidiy = y["humidity"]
> z = x["weather"]
> weather_description = z[0]["description"]
>
> print(
> "Temperature (in centigrade unit) = " +
> str(current_temperature) +
> "\n atmospheric pressure (in hPa unit) = " +
> str(current_pressure) +
> "\n humidity (in percentage) = " +
> str(current_humidiy) +
> "\n description = " +
> str(weather_description)
> )
> else:
> print(" Ciudad no encontrada ")
>
> El problema se da cuando intento ingresar una ciudad. Probé con la mía
> Corrientes (Argentina) y me da KeyError, probé con otra localidad y es lo
> mismo.
> La salida es la siguiente:
>
> /usr/bin/python3.8 /home/raiden/Programacion/weather/tiempo.py
> Ingrese nombre de la ciudad: London
> Traceback (most recent call last):
>   File "/home/raiden/Programacion/weather/tiempo.py", line 18, in 
> y = x['main']
> KeyError: 'main'
>
> Leí que generalmente ese error se debe a que no encuentra el path o no
> existe. Probé cambiar en la línea 18 el "main" por "cod" y el error ya es
> otro. Es el siguiente:
>
> /usr/bin/python3.8 /home/raiden/Programacion/weather/tiempo.py
> Ingrese nombre de la ciudad: London
> Traceback (most recent call last):
>   File "/home/raiden/Programacion/weather/tiempo.py", line 20, in 
> current_temperature = y["temp"]
> TypeError: 'int' object is not subscriptable
>
> Asi que por eso comenté la línea como se ve en el código, porque me parece
> que mi problema es con main.
>
> El código original es este:
> Python-find-current-weather-of-any-city-using-openweathermap-api/
> 
>
> Saludos
>
___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es


[Python-es] [Consulta] Sobre keyerror

2020-07-02 Por tema lemarchand8679
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? 
GraciasEnviado desde mi smartphone Samsung Galaxy.___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es


Re: [Python-es] [Consulta] Sobre keyerror

2020-07-02 Por tema Gerardo Diez
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 
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


Re: [Python-es] [Consulta] Sobre keyerror

2020-07-02 Por tema Lemarchand Barker
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 
y = x["main"]
KeyError: 'main'

El código original es este:
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 
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


Re: [Python-es] [Consulta] Sobre keyerror

2020-07-02 Por tema Sebastián Arancibia
Hola,

En efecto el error es porque no encuentra la key en el diccionario. De
hecho hice un print de la variable que obtienes tras llamar a la API, y al
no tener un API KEY válido no viene el elemento "main" dentro del
diccionario.

Este es el json de respuesta convertido a diccionario: {'cod': 401,
'message': 'Invalid API key. Please see
http://openweathermap.org/faq#error401 for more info.'}
Fíjate que si viene el cod (y por eso no se cae en esa línea), pero no
viene nada mas, lo que haría yo en ese if es validar respuestas distintas a
200.

Raro si, que me creé una cuenta para usar la API, y no me funciona la API
KEY. Debe estar desactualizado el tutorial.

Saludos.

On Thu, Jul 2, 2020 at 6:30 PM Lemarchand Barker 
wrote:

> 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 
> y = x["main"]
> KeyError: 'main'
>
> El código original es este:
> 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 
> 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


Re: [Python-es] [Consulta] KeyError: 'main'

2020-07-02 Por tema Alexis Roda
Hola,

En este caso el valor de x no es exactamente como crees que es: esperas que
tenga una clave llamada "main" que aparentemente no tiene (dispara una
excepción KeyError cuando intentas acceder a "main"). Lo que puedes hacer
es averiguar como es realmente el valor almacenado en x.

Lo más sencillo para depurar este tipo de errores es utilizar alguna
variación de esto que tenga sentido en cada caso:

x = response.json()
print(type(x))  # esto te permite confirmar si x es realmente del
tipo que esperas
print(list(x.keys()))   # suponiendo que sea un diccionario, esto
te muestra sus claves

print(d)# esto imprime el diccionario


Imagino que al hacer la petición al servidor remoto se produce algún tipo
de error que no tienes en cuenta y el formato de la respuesta es distinto
al esperado.

Dices que has cambiado "main" por "cod", no acabo de verle la lógica parece
bastante arbitrario. Para aprender sería interesante que vieses porque ese
cambio produce el segundo error.


Saludos

Missatge de Lemarchand Barker  del dia dj., 2 de
jul. 2020 a les 16:44:

> Hola, estoy teniendo un inconveniente a la hora de correr un programa.
>
> El código es este:
>
> base_url = "http://api.openweathermap.org/data/2.5/weather?q=";
>
> city_name = input("Ingrese nombre de la ciudad: ")
>
> complete_url = base_url + "appid=" + api_key + "&q=" + city_name
>
> response = requests.get(complete_url)
>
> x = response.json()
>
> if x["cod"] != "404":
> y = x['main']
> # y = x["cod"]
> current_temperature = y["temp"]
> current_pressure = y["pressure"]
> current_humidiy = y["humidity"]
> z = x["weather"]
> weather_description = z[0]["description"]
>
> print(
> "Temperature (in centigrade unit) = " +
> str(current_temperature) +
> "\n atmospheric pressure (in hPa unit) = " +
> str(current_pressure) +
> "\n humidity (in percentage) = " +
> str(current_humidiy) +
> "\n description = " +
> str(weather_description)
> )
> else:
> print(" Ciudad no encontrada ")
>
> El problema se da cuando intento ingresar una ciudad. Probé con la mía
> Corrientes (Argentina) y me da KeyError, probé con otra localidad y es lo
> mismo.
> La salida es la siguiente:
>
> /usr/bin/python3.8 /home/raiden/Programacion/weather/tiempo.py
> Ingrese nombre de la ciudad: London
> Traceback (most recent call last):
>   File "/home/raiden/Programacion/weather/tiempo.py", line 18, in 
> y = x['main']
> KeyError: 'main'
>
> Leí que generalmente ese error se debe a que no encuentra el path o no
> existe. Probé cambiar en la línea 18 el "main" por "cod" y el error ya es
> otro. Es el siguiente:
>
> /usr/bin/python3.8 /home/raiden/Programacion/weather/tiempo.py
> Ingrese nombre de la ciudad: London
> Traceback (most recent call last):
>   File "/home/raiden/Programacion/weather/tiempo.py", line 20, in 
> current_temperature = y["temp"]
> TypeError: 'int' object is not subscriptable
>
> Asi que por eso comenté la línea como se ve en el código, porque me parece
> que mi problema es con main.
>
> El código original es este:
> Python-find-current-weather-of-any-city-using-openweathermap-api/
> 
>
> Saludos
> ___
> 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


Re: [Python-es] [Consulta] Sobre keyerror

2020-07-02 Por tema David Suárez vía Python-es
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 
> y = x["main"]
> KeyError: 'main'
>
> El código original es este:
> 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 
> 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


Re: [Python-es] [Consulta] Sobre keyerror

2020-07-02 Por tema Lemarchand Barker
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
>> 
>> y = x["main"]
>> KeyError: 'main'
>>
>> El código original es este:
>> 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 
>> 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


Re: [Python-es] [Consulta] Sobre keyerror

2020-07-02 Por tema lasizoillo
Buenas, perdonad el Off Topic, pero creo que es interesante comentar esto.

El jue., 2 jul. 2020 a las 23:19, 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 te voy a dármelas de listo y voy a confesar que de vez en cuando también
hago "print debugging", pero cuando cuando lo hago es por pura vagancia y
cosas muy rapiditas aun sabiendo que no es lo mejor para el día a día o
para proyectos que van cogiendo cierto tamaño.

Un avance sobre sobre el "print debugging" es usar el módulo logging.
Basicamente la idea es que los prints que usas de debug los tienes que
quitar para no tener "morralla" en producción. Si los imprimes con nivel de
log debug, modificando en un único sitio puedes hacer que aparezcan o
desaparezcan con la configuración del logger y no se escapa ninguno a
producción ensuciándose los logs. Y puedes incluso configurar para que
determinado módulo (o el namespace que utilices) tenga un cierto nivel de
log (por ejemplo DEBUG) mientras que otros módulos tengan otro nivel de log
(por ejemplo WARNING).

Pero lo mejor del mundo mundial es usar un debugger. Pdb viene con python
pero es muy espartano, seguramente estés más cómodo con ipdb. Y si usas un
IDE seguro que se integra con uno, que es incluso más cómodo. Puedes poner
puntos de ruptura (el código se ejecuta hasta llegar a uno de ellos),
ejecutar a partir de ahí paso a paso, analizar cualquier variable que
tengas en el scope, volver a hacer que el programa se ejecute hasta el
final o el siguiente punto de ruptura, usar el repl de python para probar
que el código que te va a solucionar el problema realmente funciona,... Al
principio puede que cueste un poquito, pero la inversión de tiempo se
amortiza rápido.

Resumen: a nada que estés haciendo algo que no sea un script de usar y
tirar configura el logger y deja de usar print debugging. Aun así no hagas
"print debugging" con el logger a no ser que esté justificado, mejor usa un
debugger.

Un saludo,

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


Re: [Python-es] [Consulta] Sobre keyerror

2020-07-02 Por tema Sebastián Arancibia
Aportando a lo que dices, y considerando que Verónica (ese era tu nombre,
verdad?) usa PyCharm, el debugger que viene con el IDE es prácticamente lo
mejor del IDE. Puedes configurar tu código para que se ejecute desde un
main y ahí es simplemente darle "play" a la flecha que aparece al costado
de la línea donde declaras el main (justo no estoy en el compu del trabajo
donde uso PyCharm para desarrollar, pero mañana podría subir una captura).
El debugging te permite, aparte de poner los puntos de quiebre, ver los
valores de las variables en todo momento así como usar watchers para ser
aún más específico, así que si, muy buen consejo y es recomendable
familiarizarse a debuggear así ya que con print logging pierdes mucho
tiempo en escribir y luego remover logs que no se usarán en la app.

Saludos.

On Thu, Jul 2, 2020 at 9:30 PM lasizoillo  wrote:

> Buenas, perdonad el Off Topic, pero creo que es interesante comentar esto.
>
> El jue., 2 jul. 2020 a las 23:19, 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 te voy a dármelas de listo y voy a confesar que de vez en cuando
> también hago "print debugging", pero cuando cuando lo hago es por pura
> vagancia y cosas muy rapiditas aun sabiendo que no es lo mejor para el día
> a día o para proyectos que van cogiendo cierto tamaño.
>
> Un avance sobre sobre el "print debugging" es usar el módulo logging.
> Basicamente la idea es que los prints que usas de debug los tienes que
> quitar para no tener "morralla" en producción. Si los imprimes con nivel de
> log debug, modificando en un único sitio puedes hacer que aparezcan o
> desaparezcan con la configuración del logger y no se escapa ninguno a
> producción ensuciándose los logs. Y puedes incluso configurar para que
> determinado módulo (o el namespace que utilices) tenga un cierto nivel de
> log (por ejemplo DEBUG) mientras que otros módulos tengan otro nivel de log
> (por ejemplo WARNING).
>
> Pero lo mejor del mundo mundial es usar un debugger. Pdb viene con python
> pero es muy espartano, seguramente estés más cómodo con ipdb. Y si usas un
> IDE seguro que se integra con uno, que es incluso más cómodo. Puedes poner
> puntos de ruptura (el código se ejecuta hasta llegar a uno de ellos),
> ejecutar a partir de ahí paso a paso, analizar cualquier variable que
> tengas en el scope, volver a hacer que el programa se ejecute hasta el
> final o el siguiente punto de ruptura, usar el repl de python para probar
> que el código que te va a solucionar el problema realmente funciona,... Al
> principio puede que cueste un poquito, pero la inversión de tiempo se
> amortiza rápido.
>
> Resumen: a nada que estés haciendo algo que no sea un script de usar y
> tirar configura el logger y deja de usar print debugging. Aun así no hagas
> "print debugging" con el logger a no ser que esté justificado, mejor usa un
> debugger.
>
> Un saludo,
>
> Javi
> ___
> 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