Guía Completa sobre `try-except` en Python: Manejo de Excepciones


El manejo de excepciones en Python es esencial para hacer que nuestros programas sean más robustos y eviten fallos inesperados. La estructura `try-except` nos permite capturar y gestionar errores que puedan ocurrir durante la ejecución de un programa. De esta forma, podemos manejar los errores de manera controlada en lugar de que el programa se detenga abruptamente.


En este post, vamos a explorar en detalle cómo funciona el bloque `try-except`, cómo manejar diferentes tipos de excepciones y cuáles son los métodos y parámetros que puedes utilizar para personalizar el comportamiento del manejo de errores en Python.



¿Qué es el Bloque `try-except`?

En Python, cuando ocurre un error durante la ejecución de un programa, se lanza una excepción. Si no se maneja esa excepción, el programa se detiene y genera un mensaje de error. El bloque `try-except` se utiliza para capturar esas excepciones y proporcionar una respuesta controlada en lugar de detener el programa.


La estructura básica es la siguiente:


try:

  # Código que puede generar una excepción

except:

  # Código que se ejecuta si ocurre una excepción



- `try`: El bloque `try` contiene el código que puede generar una excepción.

- `except`: El bloque `except` captura la excepción si ocurre.



Ejemplo Básico de `try-except`

try:

  resultado = 10 / 0 # Esto genera un error de división por cero

except ZeroDivisionError:

  print("Error: No se puede dividir entre cero.")



En este ejemplo:

- El código en el bloque `try` intenta dividir 10 entre 0, lo cual genera una excepción `ZeroDivisionError`.

- El bloque `except` captura esa excepción y ejecuta el código que maneja el error mostrando un mensaje en la consola.



Tipos de Excepciones

Python tiene varios tipos de excepciones predefinidas que puedes capturar usando el bloque `try-except`. Algunas de las más comunes son:


- `ZeroDivisionError`: Ocurre cuando se intenta dividir un número entre cero.

- `ValueError`: Se genera cuando se proporciona un valor incorrecto a una función (por ejemplo, intentar convertir una cadena que no es un número a entero).

- `FileNotFoundError`: Se lanza cuando se intenta abrir un archivo que no existe.

- `KeyError`: Se lanza cuando se intenta acceder a una clave que no existe en un diccionario.

- `IndexError`: Ocurre cuando se intenta acceder a un índice fuera del rango de una lista.

- `TypeError`: Se lanza cuando se realiza una operación sobre un tipo de dato inapropiado (por ejemplo, intentar sumar una cadena a un número).



Manejo de Múltiples Excepciones

Puedes manejar varios tipos de excepciones en un solo bloque `try` usando varios bloques `except`:


try:

  numero = int(input("Ingresa un número: "))

  resultado = 10 / numero

except ZeroDivisionError:

  print("Error: No se puede dividir entre cero.")

except ValueError:

  print("Error: Debes ingresar un número.")



En este ejemplo:

- Si el usuario ingresa "0", se lanza la excepción `ZeroDivisionError` y se muestra el mensaje correspondiente.

- Si el usuario ingresa un valor que no es un número, como "abc", se lanza la excepción `ValueError`.



Uso de `else` en `try-except`

El bloque `else` se ejecuta si el código en el bloque `try` no genera una excepción. Es útil cuando quieres ejecutar código adicional solo si no ocurre ningún error.


try:

  resultado = 10 / 2

except ZeroDivisionError:

  print("Error: No se puede dividir entre cero.")

else:

  print("El resultado es:", resultado)


En este caso, si la división es exitosa (no ocurre una excepción), se ejecuta el bloque `else`.



Uso de `finally` en `try-except`

El bloque `finally` siempre se ejecuta, tanto si ocurre una excepción como si no. Es útil para realizar acciones de limpieza, como cerrar archivos o liberar recursos.


try:

  archivo = open("archivo.txt", "r")

  contenido = archivo.read()

except FileNotFoundError:

  print("Error: El archivo no se encontró.")

finally:

  print("Este mensaje siempre se muestra.")

  archivo.close() # Si el archivo se abrió, se cierra


- El bloque `finally` se ejecuta siempre, sin importar si se capturó una excepción o no. En este caso, siempre se intenta cerrar el archivo, lo cual es una buena práctica para evitar fugas de recursos.



Capturar la Excepción General

Si no especificas un tipo de excepción en el bloque `except`, puedes capturar cualquier excepción. Esto es útil cuando no sabes exactamente qué tipo de error puede ocurrir.


try:

  resultado = 10 / 0

except Exception as e:

  print(f"Ocurrió un error: {e}")


En este ejemplo:

- La excepción general `Exception` captura cualquier error.

- `e` es el objeto que contiene detalles sobre la excepción, y puedes imprimirlo para ver el mensaje de error.



Atributos de las Excepciones

Cuando capturas una excepción, puedes acceder a varios atributos y métodos del objeto excepción. Estos atributos te proporcionan más detalles sobre el error.


Atributos Importantes:

1. `args`: Una tupla que contiene los argumentos pasados a la excepción.


  try:

    resultado = 10 / 0

  except ZeroDivisionError as e:

    print(e.args) # Muestra los detalles de la excepción



2. `__str__()`: Devuelve el mensaje de error en forma de cadena. Puedes llamarlo directamente al imprimir la excepción.


  try:

    resultado = 10 / 0

  except ZeroDivisionError as e:

    print(str(e)) # Muestra el mensaje de error



3. `__cause__`: Muestra la causa original de la excepción si fue encadenada con `raise from`.



Excepciones Personalizadas

Puedes crear tus propias excepciones personalizadas heredando de la clase `Exception` en Python. Esto es útil cuando quieres lanzar errores específicos para tu aplicación.


class MiExcepcionPersonal(Exception):

  pass


try:

  raise MiExcepcionPersonal("Este es un error personalizado.")

except MiExcepcionPersonal as e:

  print(e)


En este ejemplo, se define una nueva clase de excepción `MiExcepcionPersonal`, que puedes lanzar y capturar como cualquier otra excepción.



Ejemplo Completo con `try-except`

A continuación, te dejo un ejemplo completo que ilustra el uso de `try-except`, manejo de múltiples excepciones, y el uso de `else` y `finally`.


def dividir_numeros():

  try:

    numero1 = float(input("Ingresa el primer número: "))

    numero2 = float(input("Ingresa el segundo número: "))

    resultado = numero1 / numero2

  except ValueError:

    print("Error: Debes ingresar números válidos.")

  except ZeroDivisionError:

    print("Error: No se puede dividir entre cero.")

  else:

    print(f"El resultado es: {resultado}")

  finally:

    print("Gracias por usar el programa.")


dividir_numeros()


Descripción:

- `try`: Se intenta dividir dos números ingresados por el usuario.

- `except ValueError`: Se captura si el usuario ingresa un valor no numérico.

- `except ZeroDivisionError`: Se captura si el usuario intenta dividir entre 0.

- `else`: Se ejecuta si no ocurre ninguna excepción, mostrando el resultado de la división.

- `finally`: Siempre se ejecuta, agradeciendo al usuario por usar el programa.



Hay mucho más contenido sobre Python para ti 

Puedes conocer todo el contenido que comparto en mi perfil de LinkedIn

 

Puedes descargar GRATIS mi manual completo en pdf de Python Rápido


image


This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.