TRY (Intentar)

Es como decir: "Voy a intentar hacer esta acción que podría salir mal"

Ejemplo: Intentar hacer una llamada telefónica importante.

EXCEPT (Excepto/Si falla)

Es tu plan B: "Si algo sale mal, haré esto otro"

Ejemplos:

  • "Si la línea está ocupada, enviaré un mensaje"

  • "Si no contesta, dejaré un correo de voz"

  • "Si el número no existe, buscaré otro contacto"

FINALLY (Finalmente)

Es lo que SIEMPRE harás, pase lo que pase:

Ejemplo:

  • "Finalmente, siempre anotaré en mi agenda que intenté contactar a esta persona"

  • "Finalmente, guardaré el teléfono sin importar si la llamada fue exitosa o no"

Analogía Completa:

Situación: Horneando un pastel

  1. TRY → Intentas hornear el pastel con la receta

  2. EXCEPT →

    • Si se quema: Harás uno nuevo

    • Si faltan ingredientes: Irás al supermercado

    • Si se cae: Limpiarás y prepararás otro

  3. FINALLY → Siempre lavarás los utensilios usedados, sin importar si el pastel salió bien o mal

En resumen:

  • TRY: "Voy a intentar esto"

  • EXCEPT: "Si falla, haré esto otro"

  • FINALLY: "Y pase lo que pase, siempre haré esto al final"

Es como tener un plan principal, planes de contingencia, y una acción que siempre realizarás para dejar todo en orden.

Te explico el manejo de excepciones en Python con try, except, finally:

Estructura Básica

python
try:
    # Código que puede generar una excepción
    resultado = 10 / 0
except:
    # Código que se ejecuta si ocurre una excepción
    print("¡Ocurrió un error!")

try - except (Captura específica)

python
try:
    numero = int(input("Ingresa un número: "))
    resultado = 10 / numero
    print(f"Resultado: {resultado}")
except ValueError:
    print("Error: Debes ingresar un número válido")
except ZeroDivisionError:
    print("Error: No se puede dividir por cero")
except Exception as e:
    print(f"Error inesperado: {e}")

try - except - else

python
try:
    numero = int(input("Ingresa un número: "))
    resultado = 10 / numero
except ValueError:
    print("Error: Valor no válido")
except ZeroDivisionError:
    print("Error: División por cero")
else:
    # Se ejecuta solo si NO hubo excepciones
    print(f"El resultado es: {resultado}")

try - except - finally

python
try:
    archivo = open("datos.txt", "r")
    contenido = archivo.read()
    print(contenido)
except FileNotFoundError:
    print("El archivo no existe")
finally:
    # Siempre se ejecuta, haya o no excepciones
    print("Cerrando recursos...")
    if 'archivo' in locals():
        archivo.close()

Ejemplo Completo

python
def procesar_numero():
    try:
        numero = int(input("Ingresa un número: "))
        resultado = 100 / numero
    except ValueError:
        print("Error: Debe ser un número entero")
        return None
    except ZeroDivisionError:
        print("Error: No se puede dividir por cero")
        return None
    else:
        print("¡Operación exitosa!")
        return resultado
    finally:
        print("Este mensaje siempre se muestra")

# Uso
resultado = procesar_numero()
if resultado is not None:
    print(f"El resultado es: {resultado}")

Casos de Uso Comunes

1. Validación de entrada

python
def obtener_edad():
    try:
        edad = int(input("Ingresa tu edad: "))
        if edad < 0 or edad > 120:
            raise ValueError("Edad no válida")
        return edad
    except ValueError as e:
        print(f"Error: {e}")
        return None

2. Manejo de archivos

python
try:
    with open("archivo.txt", "r") as archivo:
        datos = archivo.read()
except FileNotFoundError:
    print("Archivo no encontrado")
except PermissionError:
    print("Sin permisos para leer el archivo")
except IOError as e:
    print(f"Error de E/S: {e}")

3. Conexiones a bases de datos

python
import sqlite3

try:
    conexion = sqlite3.connect("mi_base.db")
    cursor = conexion.cursor()
    cursor.execute("SELECT * FROM usuarios")
except sqlite3.Error as e:
    print(f"Error de base de datos: {e}")
finally:
    if 'conexion' in locals():
        conexion.close()

Buenas Prácticas

  1. Sé específico con los tipos de excepciones

  2. No captures todas las excepciones sin saber qué son

  3. Usa finally para liberar recursos

  4. Documenta las excepciones que puede lanzar tu código

  5. No abuses del manejo de excepciones para lógica normal

Comentarios

Entradas populares de este blog

¿Qué es un Closure?

Calculadora de edad

Funciones en Python: con y sin paréntesis