[pyar] Ayuda - Nuevo en python - como leer error?
Edgardo
edgardolor en gmail.com
Vie Sep 27 18:31:57 -03 2019
Gracias @Tordek pero el código no es mio es el que se usa como ejemplo en
el libro.
No hay forma de que pueda reproducir ese error. Esta en el cap 3 por si lo
queres ver: http://greenteapress.com/thinkpython2/thinkpython2.pdf
Sigo con la duda de QUE QUISO EXPLICAR EL AUTOR, porque no queda claro por
la forma en como viene explicando las funciones/variables a lo largo del
cap.
El vie., 27 sept. 2019 a las 17:00, Tordek (<kedrot en gmail.com>) escribió:
> Un problema que tenés es que el código que pusiste no coincide con lo
> que indica el error:
>
> Según tu mail, tenés
>
> def imprimeDoble(paso):
> print paso, paso
>
> def catDoble(parte1, parte2):
> cat = parte1 + parte2
> imprimeDoble(cat)
>
> Que no tiene ningún error; por otro lado, según el error,
> `imprimeDoble` está definido así:
>
> def imprimeDoble(paso):
> print cat
>
> Si corrés eso en el intérprete te da el error que pusiste. Supongo que
> en algún lado dirá "Si la función imprimeDoble tuviera un error,
> veríamos esto", o similar.
>
> --
> Tordek
>
> On Fri, 27 Sep 2019 at 16:48, Edgardo <edgardolor en gmail.com> wrote:
> >
> > Gracias por tu respuesta @Tordek pero mi duda viene a raiz de que yo
> intento reproducir el error (ver mi mail anterior) y no me da igual al del
> libro.
> >
> > Tampoco en el libro te detalla la serie de pasos que hace para conseguir
> ese error solo detalla el "que pasaría si..."
> >
> > Sigo con la duda. Gracias.
> >
> > El vie., 27 sept. 2019 a las 16:42, Tordek (<kedrot en gmail.com>)
> escribió:
> >>
> >> > Lo que yo entiendo es que en _main_ se hizo una llamada a
> ImprimeDoble y se le paso un argumento que quiere hacer referencia a una
> variable local definida en otra función
> >>
> >> No. La primera linea del trace te dice: en `__main__` se llamó a
> >> catDoble(cantus1, cantus2). Después pasaron otras cosas y `catDoble`
> >> llamó a `imprimeDoble`, después pasaron otras cosas, y `imprimeDoble`
> >> llamó a `print cat`, y ahí saltó el error: `cat` no existe en el
> >> contexto de `imprimeDoble`.
> >>
> >> El error ocurre ahí: esa función quiere imprimir esa variable, pero no
> existe.
> >>
> >> El traceback lo podés leer de abajo hacia arriba, como te dijo Damian:
> >> En el lugar que te indica la última línea es donde finalmente ocurrió
> >> el problema; la línea anterior a esa te dice quién llamó a esa
> >> función, y así sucesivamente.
> >>
> >> > ¿Por que mostrar en el traceback catDoble cuando acá no tiene nada
> que ver a diferencia de main e ImprimeDoble?
> >>
> >> Porque está en el camino de las llamadas. `__main__` no llamó a
> >> `imprimeDoble`; `main` solo llamó a `catDoble` y `catDoble` a
> >> `imprimeDoble`. Saber la cadena de llamadas te sirve para analizar el
> >> problema; en este caso particular no te ayuda (pero si vamos al caso,
> >> tampoco te ayuda saber que `__main__` estaba involucrado), pero si
> >> tenés una cadena de 10 llamadas y el problema es que en algún lado se
> >> cambió el parámetro que pasaste, querés saber qué funciones estuvieron
> >> involucradas para poder revisarlas.
> >>
> >> Saludos
> >> --
> >> Tordek
> >>
> >> On Fri, 27 Sep 2019 at 14:48, Edgardo <edgardolor en gmail.com> wrote:
> >> >
> >> > @Damian Castro
> >> >
> >> > Creo que me acabo de marear mas con tu explicación. Vamos por partes:
> >> >
> >> > 1) ¿Porque el error ocurre en File "test.py", line 9, in imprimeDoble
> si la llamada a la función se realiza en la ultima linea de código del
> archivo? ¿No debería ser esta el numero de linea mas alto?
> >> >
> >> > 2) No entiendo porque Python me muestra la funcion que llama a
> ImprimeDoble como parte del traceback si en este caso no se esta llamando a
> la función catDoble. Lo que yo entiendo es que en _main_ se hizo una
> llamada a ImprimeDoble y se le paso un argumento que quiere hacer
> referencia a una variable local definida en otra función, entonces ¿Porque
> no solo mostrar el error de que ImprimeDoble no puede llamar a una variable
> local de otra funciona?
> >> > ¿Porque mostrar en el traceback catDoble cuando acá no tiene nada que
> ver a diferencia de main e ImprimeDoble?
> >> >
> >> > Se entiende mi duda?
> >> >
> >> > @Carlos Miguel Farias el código pegado esta sacado del libro, en mi
> Ubuntu uso python3 ;)
> >> >
> >> > Mil gracias, chicos.
> >> >
> >> > El vie., 27 sept. 2019 a las 3:04, Damián Castro (<ltdicai en gmail.com>)
> escribió:
> >> >>
> >> >> Hola Edgardo, el traceback generalmente se lee de abajo hacia
> arriba, siendo la última línea el error en sí, mientras que las anteriores
> indican la ejecución del código que llevó a ese error. En ese ejemplo:
> >> >>
> >> >>> File "test.py", line 9, in imprimeDoble
> >> >>> print cat
> >> >>>
> >> >>> NameError: cat
> >> >>
> >> >>
> >> >> Indica que se produjo un error del tipo NameError en la línea 9 del
> archivo test.py dentro de la función imprimeDoble. Ahora bien, si queremos
> saber cuándo se llamó a esa función vemos las líneas encima:
> >> >>
> >> >>> File "test.py", line 5, in catDoble
> >> >>> imprimeDoble(cat)
> >> >>
> >> >>
> >> >> Ahí dice que se llamó a la función imprimeDoble en la línea 5 del
> mismo archivo, dentro de la función catDoble. Siguiendo la misma idea,
> vemos cuándo se llama a catDoble mirando las primeras líneas:
> >> >>
> >> >>> File "test.py", line 13, in __main__
> >> >>> catDoble(cantus1, cantus2)
> >> >>
> >> >>
> >> >> Efectivamente se llamó a catDoble en el mismo archivo pero en la
> línea 13 dentro de la función __main__, o sea la principal.
> >> >>
> >> >> Entonces, con todo esto podés armar el flujo de ejecución para poder
> detectar el porqué del error: catDoble() -> imprimeDoble() -> print cat ->
> NameError
> >> >>
> >> >> Espero que esto te ayude
> >> >>
> >> >> Saludos,
> >> >> Damián
> >> >>
> >> >> El vie., 27 de sep. de 2019 a la(s) 02:41, Edgardo (
> edgardolor en gmail.com) escribió:
> >> >>>
> >> >>> Buenas noches,
> >> >>>
> >> >>> Les comento que hace algunos años intente aprender a programar y
> desistí por cuestiones laborales. Hoy por hoy ya con laburo estable estoy
> volviendo al ruedo. Para ponerlos en contexto, de forma rápida, mi hno de
> 29 esta casi por la mitad de Ing Industrial en la UTN y al no conseguir
> laburo se decidió por aprender a programar (después de ver la cant de gente
> que piden en los portales laborales) y yo de 31 me sume a la voleada ya que
> si conozco a alguien super capaz y que es inteligente es el.
> >> >>>
> >> >>> Estamos leyendo a la par "Aprenda a pensar como un programador con
> Python" y hasta casi el final del cap 3 veníamos bárbaro, pero es acá donde
> nos surge la siguiente duda:
> >> >>>
> >> >>> El cap define 2 funciones:
> >> >>>
> >> >>> 1)
> >> >>> def imprimeDoble(paso):
> >> >>> print paso, paso
> >> >>>
> >> >>> 2)
> >> >>> def catDoble(parte1, parte2):
> >> >>> cat = parte1 + parte2
> >> >>> imprimeDoble(cat)
> >> >>>
> >> >>> Luego hace la llamada a la función 1 y le pasa como argumento la
> variable local cat, creada solo dentro de catDoble().
> >> >>>
> >> >>> Entiendo el PORQUE del error que devuelve python lo que no entiendo
> es como leerlo, seria el siguiente:
> >> >>>
> >> >>> Traceback (innermost last):
> >> >>> File "test.py", line 13, in __main__
> >> >>> catDoble(cantus1, cantus2)
> >> >>> File "test.py", line 5, in catDoble
> >> >>> imprimeDoble(cat)
> >> >>> File "test.py", line 9, in imprimeDoble
> >> >>> print cat
> >> >>> NameError: cat
> >> >>>
> >> >>> Y detalla "Esta lista de funciones de llama traceback (traza
> inversa). Le dice a usted en
> >> >>> qué archivo de programa sucedió el error, y en qué lı́nea, y qué
> funciones se
> >> >>> ejecutaban en ese momento. También muestra la lı́nea de código que
> causó el
> >> >>> error."
> >> >>>
> >> >>> Si alguno fuera tan amable de explicarmelo se lo agradecería.
> >> >>>
> >> >>> Muchas gracias,
> >> >>>
> >> >>> Toty
> >> >>> _______________________________________________
> >> >>> Lista de Correo de PyAr - Python Argentina - pyar en python.org.ar
> >> >>> Sitio web: http://www.python.org.ar/
> >> >>>
> >> >>> Para administrar la lista (o desuscribirse) entrar a
> http://listas.python.org.ar/listinfo/pyar
> >> >>>
> >> >>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre
> de Argentina - http://www.usla.org.ar
> >> >>
> >> >> _______________________________________________
> >> >> Lista de Correo de PyAr - Python Argentina - pyar en python.org.ar
> >> >> Sitio web: http://www.python.org.ar/
> >> >>
> >> >> Para administrar la lista (o desuscribirse) entrar a
> http://listas.python.org.ar/listinfo/pyar
> >> >>
> >> >> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre
> de Argentina - http://www.usla.org.ar
> >> >
> >> > _______________________________________________
> >> > Lista de Correo de PyAr - Python Argentina - pyar en python.org.ar
> >> > Sitio web: http://www.python.org.ar/
> >> >
> >> > Para administrar la lista (o desuscribirse) entrar a
> http://listas.python.org.ar/listinfo/pyar
> >> >
> >> > La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre
> de Argentina - http://www.usla.org.ar
> >> _______________________________________________
> >> Lista de Correo de PyAr - Python Argentina - pyar en python.org.ar
> >> Sitio web: http://www.python.org.ar/
> >>
> >> Para administrar la lista (o desuscribirse) entrar a
> http://listas.python.org.ar/listinfo/pyar
> >>
> >> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
> Argentina - http://www.usla.org.ar
> >
> > _______________________________________________
> > Lista de Correo de PyAr - Python Argentina - pyar en python.org.ar
> > Sitio web: http://www.python.org.ar/
> >
> > Para administrar la lista (o desuscribirse) entrar a
> http://listas.python.org.ar/listinfo/pyar
> >
> > La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
> Argentina - http://www.usla.org.ar
> _______________________________________________
> Lista de Correo de PyAr - Python Argentina - pyar en python.org.ar
> Sitio web: http://www.python.org.ar/
>
> Para administrar la lista (o desuscribirse) entrar a
> http://listas.python.org.ar/listinfo/pyar
>
> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
> Argentina - http://www.usla.org.ar
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20190927/a622b730/attachment-0001.html>
Más información sobre la lista de distribución pyar