Excepciones en Programación
Concepto y Tipos de Errores
Las excepciones son errores que ocurren durante la ejecución de un código, intrerumpiendo el flujo normal del programa. En desarrollo de softwrae, se deben minimizar estos errores para garantizar la robustez del sistema.
Los errores se clasifican en dos categorías principales:
- Errores de sintaxis: Detectables durante la compilación o revisión del código, como paréntesis no cerrados o palabras clave incorrectas.
- Errores lógicos: Difíciles de identificar a simple vista, ya que el código es sintácticamente correcto pero produce resultados inesperados, como operaciones con tipos de datos incompatibles.
Información de Excepciones
En Python, cuando se lanza una excepción, el sistema proporciona detalles clave:
- Ubicación exacta del error en el código.
- Tipo de excepción, por ejemplo, TypeError o ValueError.
- Mensaje descriptivo con más información sobre la causa.
Excepciones Comunes
Algunos tipos frecuentes incluyen: SyntaxError, NameError, IndexError, KeyError y IndentationError.
Estructuras para Captura de Excepciones
Sintaxis Básica con try-except
Para manejar errores potenciales, se utiliza el bloque try para envolver el código propenso a fallos, seguido de except para definir la respuesta ante una excepción específica.
try:
# Código que podría generar un error
operacion_arriesgada()
except TipoExcepcion:
print("Se produjo un error manejado")
Por ejemplo, si intentamos acceder a una variable no definida:
try:
elemento # Variable no definida, genera NameError
print("Esto no se ejecuta")
except NameError:
print("Error: variable no encontrada")
Manejo Avanzado de Excepciones
Se pueden personalizar las respuestas según el tipo de error usando múltiples bloques except:
try:
datos = [10, 20, 30]
acceso = datos[5] # IndexError
usuario = "ejemplo"
print(usuario["clave"]) # KeyError
except IndexError as error_indice:
print(f"Índice fuera de rango: {error_indice}")
except KeyError as error_clave:
print(f"Clave no encontrada: {error_clave}")
Para capturar cualquier excepción no anticipada, se puede usar Exception:
try:
ejecutar_accion_compleja()
except Exception as error_general:
print(f"Error inesperado: {error_general}")
Uso de else y finally
El bloque else se ejecuta solo si no ocurren excepciones en try:
try:
resultado = 100 / 10
except ZeroDivisionError:
print("Error de división")
else:
print(f"Operación exitosa, resultado: {resultado}")
El bloque finally garantiza la ejecución de código, independientemente de si hubo excepciones, útil para liberar recursos:
archivo = None
try:
archivo = open("datos.txt", "r")
contenido = archivo.read()
except FileNotFoundError:
print("Archivo no encontrado")
finally:
if archivo:
archivo.close()
print("Recursos liberados")
Declaraciones Adicionales
Declaraciones de Aserción
La palabra clave assert verifica condiciones y lanza AssertionError si no se cumplen:
valor = 5
assert valor > 10, "Valor debe ser mayor a 10"
print("Esto se omite si falla la aserción")
Lanzamiento Manual de Excepciones
Con raise, se pueden generar excepciones personalizadas:
def validar_edad(edad):
if edad < 0:
raise ValueError("La edad no puede ser negativa")
return edad
Aplicaciones y Mejores Prácticas
El manejo de excepciones debe usarse con moderación, priorizando la corrección de errores predecibles. Se recomienda:
- Limitar el alcance de los bloques
trya operaciones específicas. - Evitar capturar excepciones genéricas cuando sea posible identificar tipos concretos.
- Utilizar
finallypara operaciones de limpieza, como cerrar conexiones de red o archivos.
Ejercicio Práctico con Iteradores
Implementación de un bucle personalizado usando iteradores y manejo de excepciones para recorrer una lista:
elementos = [10, 20, 30, 40, 50]
iterador = iter(elementos)
try:
while True:
actual = next(iterador)
print(actual)
except StopIteration:
pass # Fin de la iteración