Manejo de Excepciones en Python

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 try a operaciones específicas.
  • Evitar capturar excepciones genéricas cuando sea posible identificar tipos concretos.
  • Utilizar finally para 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

Etiquetas: Python excepciones Manejo de errores try-except Declaraciones de Control

Publicado el 7-4 16:58