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
TRY → Intentas hornear el pastel con la receta
EXCEPT →
Si se quema: Harás uno nuevo
Si faltan ingredientes: Irás al supermercado
Si se cae: Limpiarás y prepararás otro
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
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)
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
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
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
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
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 None2. Manejo de archivos
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
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
Sé específico con los tipos de excepciones
No captures todas las excepciones sin saber qué son
Usa
finallypara liberar recursosDocumenta las excepciones que puede lanzar tu código
No abuses del manejo de excepciones para lógica normal
Comentarios
Publicar un comentario