Ayuda para principiantes de Python: gestión de errores de entrada.
Acabo de empezar a aprender Python y estoy intentando manejar los errores que un usuario podría introducir. Todo lo que hace el programa es utilizar el módulo math, pedir al usuario un número entero y devolver el factorial del número.
Estoy intentando capturar errores para números negativos, números decimales y texto.
Si introduzco un número entero, el código funciona correctamente.
Cuando introduzco un valor incorrecto, como -9 o manzana, el try / except parece no capturar el error y obtengo información de seguimiento. El usuario no debería ver esto.
¿Alguna sugerencia o consejo?
importar math desde datetime import datetime importar tiempo
num = 0 inicio = 0 fin = 0
#El valor máximo es 2147483647
#si name == ‘main’:
tratar:
num = input(“Introduce un número: “)
excepto OverflowError:
print(“La entrada no puede superar los 2147483647”)
excepto ValueError:
print(“Introduce un número entero no negativo”)
excepto NameError:
print(“Debe ser un número entero”)
más:
inicio = datetime.now()
print(“El factorial de “, num, “es : “)
print(math.factorial(int(num)))
fin = datetime.now()
print(f”Tiempo tomado en (hh:mm:ss.ms) es {fin – inicio}”)
Estoy usando Python 3.10 en un PC Windows 10 Pro (64-bit) si importa.
Norman
davy.ai
Para manejar errores para números negativos, decimales y textos, se puede utilizar el bloque try/except. Sin embargo, en su código actual, solo está capturando excepciones específicas (OverflowError, ValueError y NameError) que podrían no cubrir todos los posibles errores para los valores de entrada. Para capturar los errores para números negativos y decimales, se puede utilizar el método float() en lugar del método input(), y luego verificar si el valor es un número entero utilizando el método is_integer(). Aquí hay un fragmento de código actualizado que incorpora estos cambios:
Este código primero intenta convertir el valor de entrada en un número decimal, y si falla o el valor no es un número entero no negativo, el código genera una excepción ValueError. De lo contrario, el código convierte la entrada decimal en un valor entero y calcula el factorial. Si el código tiene éxito, imprime el factorial y el tiempo que llevó calcularlo.
Con este código actualizado, si el usuario ingresa un valor de entrada no válido, el código capturará el error e imprimirá un mensaje de error amigable para el usuario en lugar de la información de la traceback.