Hola amigos, ¿me podrían ayudar en implementar el NameError? En el ejemplo del profesor traté de hacer la excepción para los casos en que...

Pregunta de la clase:
Manejo de excepciones
Eber Laurente Lliuyacc

Eber Laurente Lliuyacc

Pregunta
student
hace 5 años

Hola amigos, ¿me podrían ayudar en implementar el NameError?

En el ejemplo del profesor traté de hacer la excepción para los casos en que se ingrese letras, en vez de números, con el NameError pero no me resultó

def divide_elementos_de_lista(lista, divisor): try: return [i / divisor for i in lista] except NameError as e: print(e) return lista lista = list(range(10)) divisor = nn print(divide_elementos_de_lista(lista, divisor))
8 respuestas
para escribir tu comentario
    Eber Laurente Lliuyacc

    Eber Laurente Lliuyacc

    student
    hace 5 años

    Hola amigos,

    Gracias por tomarse su tiempo a analizar mi caso. Lo que puedo concluir de sus aportes es que:

    i. Sí es un NammError, pero este ocurre en la segunda línea de ejecución. Por lo cual, no llega a ingresar en el bloque try para que se ejecute el except (tal como nos indica @iqrivas)

    lista = list(range(10)) divisor = nn

    ii. Si es que se hubiera ingresado como cadena 'nn', sería un TipeErro, ya que estaríamos cayendo a un error de semántica estática al tratar de dividir un entero entre una cadena (como lo indican @ceporro y @sebastianandrade).

    lista = list(range(10)) divisor = 'nn'

    El problema en mi código, al ingresar nn, es que Python lo toma como una variable que no fue definida (un literal no inicializado).

    Gracias nuevamente amigos

    Denisse Rivas

    Denisse Rivas

    student
    hace 5 años

    Hice algunas pruebas y veo que no maneja la excepción ya que el programa se detiene antes de ejecutar la función divide_elementos_de_lista. El programa se detiene al llegar a la línea

    divisor = nn

    retornando un NameError no manejado.

    py1.PNG

    Para manejar el error, este debe ocurrir dentro del try, en este caso cambie el divisor por divisor_otro y al no estar definido este último se arroja el NameError y en la terminal podemos observar que sí lo maneja: py2.PNG

    CRISTIAN BARBERO PÉREZ

    CRISTIAN BARBERO PÉREZ

    student
    hace 5 años

    Claro Sebastián, pero cuando una variable (nn) no está definida el error es NameError, que es el error que aparece pero no lo gestiona el except y no sabemos por qué.

    Sebastián Andrade

    Sebastián Andrade

    student
    hace 5 años

    Y si se preguntan por qué es un TypeError esto es debido a que estamos tratando de dividir un entero por un dato que no funciona como divisor (en sus casos una string)

    Sebastián Andrade

    Sebastián Andrade

    student
    hace 5 años

    Haya quedado claro** disculpa el error ortografico

    Sebastián Andrade

    Sebastián Andrade

    student
    hace 5 años

    Probé un poco tu codigo y me di cuenta de dos cosas, primero que cuando pones "divisor = nn" el nn no esta entre comillas por lo tanto lo toma como si fuese una variable indefinida, y segundo no es un name error sino un TypeError

    def divide_elementos_de_lista(lista, divisor): try: return [i / divisor for i in lista] except TypeError as e: print(e) return lista lista = list(range(10)) divisor = "nn" print(divide_elementos_de_lista(lista, divisor))

    Hice estas correcciones a tu codigo y al menos a mi me funciona, espero halla quedado claro

    CRISTIAN BARBERO PÉREZ

    CRISTIAN BARBERO PÉREZ

    student
    hace 5 años

    No sabría decirte, a mí tampoco me funcionó.

    Sin embargo con el TypeError si que funciona:

    except TypeError as e: print(e) return list list1 = list(range(10)) divisor = 'a'

    A ver si alguien nos lo puede aclarar

Curso de Pensamiento Computacional con Python

Curso de Pensamiento Computacional con Python

Comienza tu camino en el desarrollo de software con el lenguaje de programación Python. Entiende la estructura de pensamiento necesaria para resolver problemas en programación. Domina las estructuras de control para crear soluciones. Conoce las características de Python que te permiten reutilizar código. Prueba tu código e implementa correcciones y mejoras.

Curso de Pensamiento Computacional con Python
Curso de Pensamiento Computacional con Python

Curso de Pensamiento Computacional con Python

Comienza tu camino en el desarrollo de software con el lenguaje de programación Python. Entiende la estructura de pensamiento necesaria para resolver problemas en programación. Domina las estructuras de control para crear soluciones. Conoce las características de Python que te permiten reutilizar código. Prueba tu código e implementa correcciones y mejoras.