[pyar] Ayuda - Nuevo en python - como leer error?

Damián Castro ltdicai en gmail.com
Vie Sep 27 15:46:09 -03 2019


Hay un problema con el libro porque la función 1 que escribiste en el
primer mail no es las que aparecen en el error (me bajé el libro y sí, no
está del todo bien explicado). La función que da el error es imprimeDoble()
pero en vez de hacer "print paso, paso" hace "print cat". Como "cat" es un
nombre que no existe en el contexto de la función imprimeDoble() tira
NameError. Tiraría el mismo error si dijera "print edgardo" porque edgardo
no es un nombre que exista dentro del contexto de esa función.

Para la segunda repregunta: no, la función __main__ está llamando a
catDoble(), y esta a su vez llama a imprimeDoble(), y es ahí, dentro de
imprimeDoble() que se produce el error.

Ahora estoy con el celular así que perdoná la desprolijidad de la respuesta
:)

Saludos,
Damián.

El vie., 27 de sep. de 2019 15:31, Edgardo <edgardolor en gmail.com> escribió:

> @Emiliano nonono, no estoy corriendo el código en mi versión de python
> SOLO estoy tratando de entender como leer el error.
>
> Lo de print() me di cuenta enseguida cuando me devolvió el error, pero acá
> la cuestión es otra. Es tratar de entender el error puntual que pone como
> ejemplo el libro.
>
>
>
> El vie., 27 sept. 2019 a las 15:20, Emiliano Cugno (<emi.cugno en gmail.com>)
> escribió:
>
>> Hola! El problema creo que viene porque el código está escrito para
>> python 2 y lo estás queriendo correr con python 3. Uno de los cambios
>> significativos fue en la función print.
>>
>> Por lo que entiendo, podés hacer dos cosas:
>> 1) instalar python 2 y correr el script con esa versión
>> 2) migrar el código a la versión 3 de python para seguir corriendo el
>> script como lo hiciste.
>>
>> Espero que te haya servido.
>> Saludos!
>>
>> El vie., 27 sep. 2019 14:48, Edgardo <edgardolor en gmail.com> escribió:
>>
>>> @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
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20190927/9b51576c/attachment-0001.html>


Más información sobre la lista de distribución pyar