🛡️ Manejo de Errores y Excepciones en Python: Guía Práctica y Clara para Evitar Fallos en tu Código [2025]
🔍 Introducción
Todo buen desarrollador sabe que los errores son parte natural del proceso de programación. Lo que diferencia a un código amateur de uno profesional es su capacidad para anticipar y manejar errores de forma elegante, evitando que el programa se detenga abruptamente y ofreciendo una experiencia más robusta al usuario.
En esta guía aprenderás a utilizar las estructuras de manejo de errores en Python, como try
, except
, else
y finally
, junto con ejemplos reales, consejos y buenas prácticas para evitar que tu programa se “rompa” ante cualquier imprevisto.
📌 ¿Qué es una excepción?
Una excepción en Python es un error que ocurre durante la ejecución del programa, y que interrumpe el flujo normal del mismo. A diferencia de los errores de sintaxis, las excepciones son errores lógicos o de tipo que aparecen mientras el programa ya está corriendo.
Ejemplos comunes de excepciones:
ZeroDivisionError
→ cuando se divide por ceroTypeError
→ cuando se intenta operar con tipos incompatiblesValueError
→ cuando se proporciona un valor no válidoFileNotFoundError
→ cuando se intenta abrir un archivo que no existe
⚙️ Sintaxis básica del manejo de excepciones
Python permite capturar y gestionar errores con la estructura:
pythontry:
# código que puede causar un error
except TipoDeError:
# código que se ejecuta si ocurre ese error
🧪 Ejemplo:
pythontry:
numero = int(input("Introduce un número: "))
resultado = 10 / numero
print("Resultado:", resultado)
except ZeroDivisionError:
print("¡No puedes dividir entre cero!")
except ValueError:
print("Debes introducir un número válido.")
➕ Múltiples excepciones
Puedes usar múltiples bloques except
para capturar diferentes tipos de errores, como se muestra arriba. También puedes capturar todos los errores genéricamente:
pythontry:
# código peligroso
except Exception as e:
print("Ocurrió un error:", e)
⚠️ Consejo: usar
except Exception
está bien para logging o debug, pero no abuses de capturar todos los errores genéricamente, ya que puedes ocultar fallos importantes.
🔄 Uso de else
y finally
✅ else
: se ejecuta si no ocurre ninguna excepción.
pythontry:
x = int(input("Número positivo: "))
except ValueError:
print("Eso no es un número.")
else:
print("Gracias. Has introducido:", x)
🧹 finally
: se ejecuta siempre, ocurra o no un error. Útil para liberar recursos (archivos, conexiones, etc.)
pythontry:
archivo = open("datos.txt")
datos = archivo.read()
except FileNotFoundError:
print("El archivo no existe.")
finally:
print("Cerrando archivo...")
archivo.close()
🚨 Errores comunes y cómo evitarlos
1. División por cero
pythontry:
r = 10 / 0
except ZeroDivisionError:
print("Error: división entre cero")
2. Conversión inválida
pythontry:
edad = int("veinticinco")
except ValueError:
print("No se puede convertir texto a número")
3. Archivo inexistente
pythontry:
with open("no_existe.txt") as f:
contenido = f.read()
except FileNotFoundError:
print("Archivo no encontrado")
🛠 Cómo crear tus propias excepciones
Puedes definir tus propias clases de excepción para controlar errores específicos de tu lógica de negocio:
pythonclass EdadInvalidaError(Exception):
pass
edad = int(input("Edad: "))
if edad < 0:
raise EdadInvalidaError("La edad no puede ser negativa")
Este patrón es útil en aplicaciones más grandes y cuando quieres que tus errores tengan nombres específicos y controlables.
✅ Buenas prácticas en manejo de errores
- Anticípate a los errores que pueden ocurrir: entradas del usuario, archivos, red.
- Usa
try...except
solo donde sea necesario, no lo pongas alrededor de todo el código. - Siempre loggea o informa el error real (usa
print(e)
ologging.error(e)
). - Usa
finally
para cerrar recursos como archivos, conexiones o servicios externos. - Evita capturar excepciones genéricas sin saber qué estás manejando.
📦 Casos prácticos: aplicaciones reales
- En formularios web: validación de campos para evitar que un usuario envíe datos vacíos o incorrectos.
- En bots y automatizaciones: capturar errores de red (
requests.exceptions
) y reintentar. - En aplicaciones de escritorio o scripts: evitar que una app se cierre inesperadamente ante errores previsibles.
🤔 ¿Cuándo usar excepciones y cuándo prevenir errores?
No todo se debe manejar con try...except
. Por ejemplo:
pythonif os.path.exists("archivo.txt"):
with open("archivo.txt") as f:
datos = f.read()
A veces es mejor verificar antes de ejecutar que intentar y capturar el error. Esta diferencia entre prevención y corrección es parte de escribir código limpio y profesional.
🧠 Conclusión
Dominar el manejo de errores y excepciones en Python es fundamental para desarrollar programas sólidos, resistentes a fallos y amigables con el usuario. Saber cuándo usar try
, cómo capturar errores específicos y cómo actuar ante fallos, marcará la diferencia entre un código frágil y uno profesional.
🔹 Ejercicio 1: División segura
Crea un programa que pida dos números al usuario y realice la división entre ellos. Debes capturar errores por división entre cero y entrada no válida.
Mostrar solución
try:
num1 = float(input("Introduce el dividendo: "))
num2 = float(input("Introduce el divisor: "))
resultado = num1 / num2
except ZeroDivisionError:
print("Error: no se puede dividir entre cero.")
except ValueError:
print("Error: debes introducir solo números.")
else:
print(f"Resultado: {resultado}")
🔹 Ejercicio 2: Validador de edad
Solicita una edad al usuario. Si el valor no es un número entero positivo, lanza una excepción personalizada.
Mostrar solución
class EdadInvalida(Exception):
pass
try:
edad = int(input("Introduce tu edad: "))
if edad < 0:
raise EdadInvalida("La edad no puede ser negativa.")
except ValueError:
print("Error: debes ingresar un número entero.")
except EdadInvalida as e:
print("Error:", e)
else:
print(f"Tu edad es: {edad}")
🔹 Ejercicio 3: Leer un archivo de texto
Pide al usuario el nombre de un archivo de texto e intenta abrirlo. Muestra un mensaje si el archivo no existe.
Mostrar solución
try:
nombre_archivo = input("Nombre del archivo a leer: ")
with open(nombre_archivo, "r") as archivo:
contenido = archivo.read()
print("Contenido del archivo:\n", contenido)
except FileNotFoundError:
print("Error: el archivo no existe.")
🔹 Ejercicio 4: Operación con tipo incorrecto
Escribe un programa que sume dos valores introducidos por el usuario. Captura errores si no son del mismo tipo o no se pueden convertir a números.
Mostrar solución
try:
a = input("Primer valor: ")
b = input("Segundo valor: ")
resultado = float(a) + float(b)
except ValueError:
print("Error: uno o ambos valores no son numéricos.")
else:
print(f"La suma es: {resultado}")
🔹 Ejercicio 5: Acceso a posición en lista
Crea una lista de 5 elementos. Pide al usuario un índice y muestra el valor correspondiente. Captura errores si el índice está fuera de rango o no es numérico.
Mostrar solución
elementos = ["Python", "Java", "C++", "JavaScript", "Ruby"]
try:
indice = int(input("Introduce un número del 0 al 4: "))
print("Elemento seleccionado:", elementos[indice])
except IndexError:
print("Error: el índice está fuera de rango.")
except ValueError:
print("Error: debes introducir un número entero.")
🗣️ ¿Te ha parecido interesante?
Si este contenido suscríbete a nuestra newsletter para no perderte futuras publicaciones sobre Python, automatización, desarrollo web y más.
💭 Además, déjanos un comentario con tus opiniones o cuéntanos qué temas te gustaría que tratemos próximamente. ¡Tu participación nos ayuda a crear mejor contenido para ti!