es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Validación de entrada de usuario utilizando Try|Except

Soy bastante nuevo en Python. Últimamente estaba trabajando en la validación de la entrada del usuario con try/except anidados. Mi código es el siguiente:

def user_input():
    try:
        myinput = 0
        myinput = float(input("Ingrese un valor numérico:"))
        if myinput > 10:
            raise ValueError('Se espera un número entre 0 y 10')
        #print(myinput)
        return myinput
    except:
        print("¡Algo salió mal, inténtelo de nuevo!")
        user_input()

print(user_input())

Aunque casi funcionaba como se esperaba, noté un problema. Cuando llamo a esta función y en la etapa inicial ingreso un valor aceptable, la función devuelve el valor numérico correcto.

Pero cuando intento ingresar un valor falso inicialmente y luego ingreso el valor correcto, la función parece no devolver el valor numérico. Intenté imprimir la salida de retorno dentro de la función, y ahí obtengo el valor esperado.

Gracias de antemano.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Parece que el problema radica en la recursión de la función user_input(). Cuando se ingresa un valor inválido, la función se llama a sí misma nuevamente para solicitar un nuevo valor. Sin embargo, cuando se ingresa un valor válido después de uno inválido, la función devuelve el valor a la instancia previa de la función en lugar de la llamada inicial de la función. Para solucionar este problema, podemos modificar la función de la siguiente manera:

    def user_input():
        while True:
            try:
                myinput = float(input("Ingrese un valor numérico entre 0 y 10: "))
                if myinput < 0 or myinput > 10:
                    raise ValueError
                return myinput
            except ValueError:
                print("Entrada inválida. Por favor, ingrese un valor numérico entre 0 y 10.")
    

    Esta función modificada utiliza un bucle while para solicitar continuamente una entrada hasta que se ingrese una entrada válida. El bloque try-except verifica si la entrada es un número flotante válido entre 0 y 10 y genera un ValueError si no lo es. La función sigue solicitando una entrada hasta que se ingrese una entrada válida, momento en el cual la función devuelve el valor.

Comments are closed.