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.
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: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.