Comprende la idea
Antes de empezar: Funciones, condicionales y tipos básicos de Python.
Una entrada puede tener un formato convertible y aun así no ser válida para tu aplicación. El texto "150" puede convertirse a entero, pero no pertenece al rango de una calificación entre 0 y 100. Conviene separar esas dos comprobaciones.
Un contrato explícito
def leer_puntos(texto):
valor = int(texto)
if not 0 <= valor <= 100:
raise ValueError("Los puntos deben estar entre 0 y 100")
return valorEsta función acepta texto convertible por int y exige el rango indicado. Para "80" devuelve 80. Para "ocho" la conversión lanza ValueError; para "150", la función lanza ese tipo de excepción con su propia explicación.
Atender un error esperado
try:
puntos = leer_puntos("150")
except ValueError as error:
print(error)El bloque except se ejecuta si ocurre ese tipo de error. Captura lo que sabes manejar. Un except demasiado general puede esconder fallos que no corresponden a una entrada inválida.
Qué pertenece a cada parte
La función puede validar y devolver el resultado, mientras la interfaz decide cómo pedir otro intento. Así no obligas a todo programa que la use a mostrar mensajes de una sola manera.
¿Un assert sustituye esta validación?
No. Las aserciones pueden omitirse al ejecutar Python con optimización. Para rechazar datos de entrada de manera necesaria, usa una comprobación explícita y una respuesta definida, como lanzar ValueError.
Vamos con un ejemplo
Prueba leer_puntos con "0", "100", "-1", "101" y "abc". Los dos primeros son extremos válidos; los siguientes salen del rango; el último ni siquiera representa un entero convertible. Cada caso comprueba una decisión distinta.
Conecta y aplica
En un formulario de estudio, informa si el dato no puede convertirse o si está fuera del rango. Conservar el valor introducido ayuda a corregirlo. La validación en una interfaz web también debe existir donde se procesen datos cuando haya un servidor.
Un detalle que importa: No confundas terminar sin excepción con tener un dato adecuado: aceptar 150 como entero solo confirma el formato numérico, no el rango de la aplicación.
Ponlo a prueba
¿Qué ocurre con leer_puntos("101") usando la función de la lección?
Elige una respuesta para ver la explicación.
¿Necesitas ayuda con este tema?
Trabájalo paso a paso con un profesor de EATRYL. Consulta disponibilidad y costo para reforzar Validación y excepciones: decidir qué hacer con una entrada inválida.
Consultar una clase sobre este tema