Parte 12 — Datos inválidos
El usuario puede escribir cualquier cosa
Este código espera un número:
saldo = int(input("Saldo inicial: "))Pero el usuario podría escribir:
holaPython intentará ejecutar:
int("hola")y producirá un error.
Ejemplo de ValueError
Código:
saldo = int(input("Saldo inicial: "))
print(saldo)Entrada:
Saldo inicial: milPosible error:
ValueError: invalid literal for int() with base 10: 'mil'El programa se detiene
Cuando ocurre ese error, Python no continúa con las siguientes líneas.
saldo = int(input("Saldo inicial: "))
print("Dato registrado")Si la conversión falla, no aparecerá:
Dato registradoRecibir, convertir y validar son pasos distintos
Es importante diferenciar tres conceptos.
Recibir
saldo_texto = input("Saldo: ")Obtiene lo que escribió el usuario.
Convertir
saldo = int(saldo_texto)Intenta transformarlo en número.
Validar
Consiste en comprobar que el dato cumpla las reglas.
Por ejemplo:
- Que realmente sea un número.
- Que no sea negativo.
- Que no esté vacío.
- Que se encuentre dentro de un límite.
- Que la moneda sea compatible.
Todavía no sabemos programar todas esas comprobaciones.
Las aprenderemos con condiciones y manejo de errores.
Un número válido también puede ser incorrecto
Supongamos que el usuario escribe:
-500Esto puede convertirse correctamente:
saldo = int("-500")No produce un ValueError.
Sin embargo, quizá nuestra aplicación no permita un ingreso negativo.
Eso no es un error de tipo.
Es un problema de validación y reglas del programa.
Suposición temporal
Durante este capítulo asumiremos que el usuario:
- Escribe números cuando se solicitan números.
- Utiliza punto para decimales.
- No deja campos importantes vacíos.
- Sigue el formato indicado.
Más adelante eliminaremos esas suposiciones y haremos MiniFinance más resistente.
Porque confiar ciegamente en el usuario es una tradición excelente para convertir una tarde tranquila en un incendio de producción.