Esta etapa me ayudó a comprender cómo manejar errores de forma más profesional en Python. Aprendí a usar try, except, else y finally para capturar y controlar distintos tipos de excepciones como ZeroDivisionError, KeyError, TypeError, ValueError e incluso crear mis propias excepciones personalizadas. Me pareció muy útil ver cómo anticipar errores comunes y dar mensajes claros al usuario, lo que hace que el código sea más robusto y confiable.
- División con manejo de errores
try:
num1 = float(input("Ingrese el primer número: "))
num2 = float(input("Ingrese el segundo número: "))
resultado = num1 / num2
except ZeroDivisionError as e:
print(type(e), "Error: No se puede dividir por cero.")
except ValueError as e:
print(type(e), "Error: Entrada no válida. Ingrese solo números.")
else:
print(f"Resultado de la división: {resultado}")
finally:
print("Fin del programa.")
- Búsqueda en diccionario con KeyError
edades = {'Júlia': 16, 'Carol': 23, 'Alberto': 19, 'Roberta': 17}
try:
nombre = input("Ingrese el nombre a buscar: ")
edad = edades[nombre]
except KeyError:
print("Nombre no encontrado")
else:
print(f"{nombre} tiene {edad} años.")
- Conversión a flotantes con manejo de errores
def convertir_a_flotantes(lista):
try:
return [float(x) for x in lista]
except Exception as e:
print(type(e), f"Error: {e}")
finally:
print("Fin de la ejecución de la función.")
**Ejemplo**
print(convertir_a_flotantes(['1.5', '2.3', 'hola'])) # Provoca error
print(convertir_a_flotantes(['1.5', '2.3', '3.0'])) # Correcto
- Agrupar listas con manejo de errores
def agrupar_listas(l1, l2):
try:
if len(l1) != len(l2):
raise IndexError("La cantidad de elementos en cada lista es diferente.")
resultado = []
for i in range(len(l1)):
resultado.append((l1[i], l2[i], l1[i] + l2[i]))
return resultado
except Exception as e:
print(type(e), f"Error: {e}")
return []
**Pruebas**
lista1 = [4, 6, 7, 9, 10]
lista2 = [-4, 6, 8, 7, 9]
print(agrupar_listas(lista1, lista2))
lista1 = [4, 6, 7, 9, 10, 4]
lista2 = [-4, 6, 8, 7, 9]
print(agrupar_listas(lista1, lista2))
lista1 = [4, 6, 7, 9, 'A']
lista2 = [-4, 'E', 8, 7, 9]
print(agrupar_listas(lista1, lista2))
- Validación de respuestas de estudiantes
def calcular_notas(respuestas_correctas, pruebas):
try:
notas = []
for prueba in pruebas:
nota = 0
for r, c in zip(prueba, respuestas_correctas):
if r not in ['A', 'B', 'C', 'D']:
raise ValueError(f"La alternativa {r} no es una opción de alternativa válida")
if r == c:
nota += 1
notas.append(nota)
return notas
except ValueError as e:
print(type(e), f"Error: {e}")
**Datos**
respuestas = ['D', 'A', 'B', 'C', 'A']
tests_sin_ex = [['D', 'A', 'B', 'C', 'A'], ['C', 'A', 'A', 'C', 'A'], ['D', 'B', 'A', 'C', 'A']]
tests_con_ex = [['D', 'A', 'B', 'C', 'A'], ['C', 'A', 'A', 'E', 'A'], ['D', 'B', 'A', 'C', 'A']]
print(calcular_notas(respuestas, tests_sin_ex))
print(calcular_notas(respuestas, tests_con_ex))
- Verificación de puntuación en palabras (NLP)
def verificar_puntuacion(lista_palabras):
try:
for palabra in lista_palabras:
if any(p in palabra for p in [',', '.', '!', '?']):
raise ValueError(f'El texto presenta puntuaciones en la palabra "{palabra}"')
print("Texto limpio, sin puntuaciones.")
except ValueError as e:
print(type(e), f"Error: {e}")
**Pruebas**
lista_tratada = ['Python', 'es', 'un', 'lenguaje', 'de', 'programación', 'poderoso', 'versátil',
'y', 'fácil', 'de', 'aprender', 'utilizado', 'en', 'diversos', 'campos', 'desde',
'análisis', 'de', 'datos', 'hasta', 'inteligencia', 'artificial']
lista_no_tratada = ['Python', 'es', 'un', 'lenguaje', 'de', 'programación', 'poderoso,', 'versátil',
'y', 'fácil,', 'de', 'aprender', 'utilizado', 'en', 'diversos', 'campos,', 'desde',
'análisis', 'de', 'datos', 'hasta', 'inteligencia', 'artificial!']
verificar_puntuacion(lista_tratada)
verificar_puntuacion(lista_no_tratada)