Bloque 106. Excepciones
Revisa los siguientes apartados de la Unidad para resolver los ejercicios:
Ejercicio 1. División controlada
Escribe un script en Python que pida al usuario dos números y muestre el resultado de dividir el primero entre el segundo. Controla con excepciones el caso de que el usuario intente dividir entre cero o introduzca por teclado un valor que no sea un número: deberás capturar las excepciones ZeroDivisionError y TypeError, mostrando un mensaje de error distinto para cada una:
- Cuando se capture
TypeError, muestra:Error: Entrada no válida, por favor introduce números. - Cuando se capture
ZeroDivisionError, muestra:Error: No se puede dividir entre cero.
Realiza la documentación del script utilizando docstring.
💾 Haz un commit al terminar el ejercicio.
Ejercicio 2. Reintento hasta valor válido
Escribe un script en Python que pida al usuario un número entero positivo, dentro de un bucle que no termine hasta obtener un valor válido:
- Si lo introducido no se puede convertir a
int, captura la excepciónValueErrorque lanzaint(...)y muestra el mensaje"El valor introducido no es un número entero. Inténtalo de nuevo"antes de volver a pedirlo. - Si es un entero pero no es positivo, muestra el mensaje
"El número debe ser positivo. Inténtalo de nuevo"y vuelve a pedirlo.
Al terminar, muestra cuántos intentos ha necesitado.
💾 Haz un commit al terminar el ejercicio.
Ejercicio 3. El doble de un número
Pide al usuario un número y, dentro de un try, conviértelo a float. Si la conversión falla, captura ValueError y muestra el mensaje "Eso no es un número válido". Si tiene éxito, usa la cláusula else del try para calcular y mostrar el mensaje "El doble es: <resultado>".
El cálculo del doble debe ir en el else, no dentro del try: así separas claramente el código que puede fallar (la conversión) del código que solo debe ejecutarse si no hubo ningún error (el cálculo con el valor ya convertido).
💾 Haz un commit al terminar el ejercicio.
Ejercicio 4. Registro de intentos
Escribe una función con la siguiente firma:
def procesar_edad(texto)
Debe recibir un texto e intente convertirlo a int dentro de un try:
- Si la conversión falla, captura
ValueError, muestra el mensaje"Entrada no válida"y devuelveNone. - Si tiene éxito, devuelve el doble de ese valor.
- Usa
finallypara mostrar el mensaje"Intento de conversión finalizado", que debe aparecer siempre, tanto si hubo error como si no.
Llama a la función varias veces con textos distintos (algunos números válidos, otros no) y comprueba que el mensaje del finally aparece en todos los casos.
💾 Haz un commit al terminar el ejercicio.
Ejercicio 5. Edad a partir del año de nacimiento
Escribe una función con la siguiente firma:
def calcular_edad(anio_nacimiento: int, anio_actual: int) -> int
Debe calcular la edad de una persona restando el año de nacimiento al año actual. Si alguno de los dos parámetros no es un número entero, lanza TypeError. Si el año de nacimiento es mayor que el año actual, lanza ValueError.
El script debe pedir ambos años al usuario, llamar a la función, y capturar la excepción que esta pueda lanzar, mostrando un mensaje distinto para cada una:
- Cuando se capture
TypeError, muestra:Error: Los años deben ser números enteros. - Cuando se capture
ValueError, muestra:Error: El año de nacimiento no puede ser posterior al año actual.
💾 Haz un commit al terminar el ejercicio.
Ejercicio 6. Raíz cuadrada
Escribe una función con la siguiente firma:
def raiz_cuadrada(numero: float | int) -> float
Debe calcular la raíz cuadrada de un número, lanzando TypeError o ValueError. La excepción ValueError se lanzará cuando el número sea negativo.
El script debe pedir un número al usuario, calcular su raíz cuadrada con la función anterior, y capturar la excepción que esta pueda lanzar, mostrando un mensaje distinto para cada una:
- Cuando se capture
TypeError, muestra:Error: Debes introducir un número. - Cuando se capture
ValueError, muestra:Error: No se puede calcular la raíz cuadrada de un número negativo.
💾 Haz un commit al terminar el ejercicio.
Ejercicio 7. Descuento de IRPF
Escribe una función con la siguiente firma:
def calcular_descuento_irpf(sueldo_bruto: float | int, irpf: int) -> float
Debe calcular el descuento de IRPF de un sueldo bruto (el resultado de aplicar el porcentaje de IRPF sobre el sueldo bruto).
Lanza las excepciones:
TypeErrorsi alguno de los dos parámetros no es un número.ValueErrorsi el sueldo bruto es negativo, o si el IRPF no está entre 0 y 100.
El script debe pedir estos datos al usuario, llamar a la función para calcular el descuento, y capturar la excepción que esta pueda lanzar, mostrando un mensaje distinto para cada una:
- Cuando se capture
TypeError, muestra:Error: Debes introducir números. - Cuando se capture
ValueError, muestra:Error: Los datos introducidos no son válidos.
💾 Haz un commit al terminar el ejercicio.
Al terminar los ejercicios, debes tener claro los siguientes conceptos:
- Qué es una excepción y cuándo se produce
- Captura de excepciones con
try/except - Captura de un tipo concreto de excepción (
except ValueError,except ZeroDivisionError...) - Captura de varios tipos de excepción a la vez
- Las cláusulas
elseyfinallyde untry - Propagación de una excepción no capturada
- Tipos de excepciones más comunes (
TypeError,ValueError,ZeroDivisionError...) - Lanzar una excepción con
raise - Documentar las excepciones que lanza una función (
Raisesen el docstring)