Portada » Blog » 🛡️ Manejo de Errores y Excepciones en Python: Guía Práctica y Clara para Evitar Fallos en tu Código [2025]

🛡️ 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 cero
  • TypeError → cuando se intenta operar con tipos incompatibles
  • ValueError → cuando se proporciona un valor no válido
  • FileNotFoundError → 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:

python
try:
# código que puede causar un error
except TipoDeError:
# código que se ejecuta si ocurre ese error

🧪 Ejemplo:

python
try:
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:

python
try:
# 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.

python
try:
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.)

python
try:
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

python
try:
r = 10 / 0
except ZeroDivisionError:
print("Error: división entre cero")

2. Conversión inválida

python
try:
edad = int("veinticinco")
except ValueError:
print("No se puede convertir texto a número")

3. Archivo inexistente

python
try:
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:

python
class 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) o logging.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:

python
if 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!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *