Atrapar excepciones en Python ayuda a reducir los errores que ocurren en tu programa. De esta manera, tu código se vuelve más confiable y fácil de usar para tus usuarios. En este artículo te enseñaré cómo atrapar múltiples excepciones en un solo bloque try/except en Python.

¿Qué son las Excepciones en Python?

En Python, las excepciones son un mecanismo de comunicación entre diferentes partes del programa. Este mecanismo permite que una parte del sistema notifique que encontró un error crítico y no sabe cómo manejarlo.

En ese caso, se lanza una excepción. Otra parte del programa, que sabe cómo manejar este error, atrapa la excepción y realiza el manejo adecuado.

Si las excepciones no se manejan, esto puede llevar a que el programa se bloquee. Por lo tanto, el manejo de excepciones ayuda a proteger tu programa de fallos y lo hace más confiable.

Importancia de manejar múltiples excepciones en Python

  • Esto ayuda a evitar la duplicación de código ya que múltiples excepciones se manejan en el mismo bloque. También hace que el código sea más fácil de leer, editar y eliminar.
  • Además, ayuda a escribir un código más eficiente ya que solo necesitas verificar el tipo de error una vez en lugar de varias veces.

Manejo de Múltiples Excepciones

Atrapar múltiples excepciones significa que varias excepciones son atrapadas por el mismo bloque except. En Python, puedes atrapar diferentes excepciones con bloques separados.

O bien, si quieres manejar las excepciones juntas, puedes manejarlas con un solo bloque. Para ello, debes atrapar varias excepciones a la vez. Aquí te explicaré cómo hacerlo y te mostraré un ejemplo.

#1. Atrapar diferentes excepciones con diferentes bloques

Supongamos que tenemos un programa que toma dos números diferentes como entrada y los divide entre sí. En este programa, suponemos que cuando el usuario ingresa valores no válidos, se lanzarán diferentes tipos de excepciones. Específicamente, vamos a manejar las excepciones ValueError y ZeroDivisionError.

La excepción ValueError se lanzará cuando el usuario ingrese un valor que no se puede convertir a un entero. La excepción ZeroDivisionError se lanzará cuando el segundo número ingresado sea cero. En ambos casos, mostraremos un mensaje de error que dice: «Ingresaste un valor no válido» (You entered an invalid value).

Para implementar todo lo que hemos descrito anteriormente, escribiremos el siguiente código:

try:
 dividend = int(input('Ingresa el primer número: '))
 divisor = int(input('Ingresa el segundo número: '))
 quotient = dividend / divisor
 print(quotient)
except ValueError as e:
 print("Ingresaste un valor no válido")
except ZeroDivisionError as e:
 print("Ingresaste un valor no válido")
except Exception as e:
 print("Algo salió mal")

Si ejecutamos este código e ingresamos texto que no se puede convertir a un entero, obtendremos el siguiente resultado:

Error de valor no válido
Error de valor no válido

Si ingresamos cero como segundo número, obtendremos este resultado:

Error de valor 0
Error de valor 0

El código funciona exactamente como esperamos, pero observa que manejamos las excepciones ValueError y ZeroDivisionError de la misma manera. Resulta que estamos duplicando casi los bloques except. Esto está lejos de ser ideal, ya que rompemos uno de los principios de la programación: DRY (Don’t Repeat Yourself – No te repitas).

Entonces, en lugar de escribir dos bloques separados, podemos combinarlos en uno que atrape múltiples excepciones. Si lo hacemos, podemos evitar repeticiones.

#2. Atrapar múltiples excepciones en un solo bloque except

Para atrapar múltiples excepciones, creamos una tupla que contiene todas las excepciones que queremos atrapar. Aquí hay un ejemplo donde atrapa dos excepciones en un solo bloque except: ValueError y ZeroDivisionError:

try:
 dividend = int(input('Ingresa el primer número: '))
 divisor = int(input('Ingresa el segundo número: '))
 quotient = dividend / divisor
 print(quotient)
except (ValueError, ZeroDivisionError) as e:
 print("Ingresaste un valor no válido")
except Exception as e:
 print("Algo salió mal")

Esta implementación es mucho mejor que el código anterior. En esencia, esta es la forma de manejar múltiples excepciones. El código que se muestra arriba funciona de manera similar al anterior. Entonces, si lo pruebas usando los ejemplos anteriores, todo debería funcionar como antes:

Valor no válido en múltiples excepciones
Valor no válido en múltiples excepciones
Error valor 0 en múltiples excepciones
Error valor 0 en múltiples excepciones

#3. Determinando qué excepción fue atrapada

El código anterior ejecuta el primer bloque except cuando se encuentra un error ValueError o ZeroDivisionError. En algunos casos, es posible que quieras ejecutar algún código para ambos errores y algún código adicional solo para uno de ellos.

En ese caso, primero necesitas determinar qué error fue atrapado y luego ejecutar el código correspondiente.

Para determinar qué excepción fue atrapada, puedes agregar un bloque if/else dentro del bloque except. Aquí hay un ejemplo:

try:
 dividend = int(input('Ingresa el primer número: '))
 divisor = int(input('Ingresa el segundo número: '))
 quotient = dividend / divisor
 print(quotient)
except (ValueError, ZeroDivisionError) as e:
 print("Ingresaste un valor no válido")

 if isinstance(e, ValueError):
  print('Error de valor')
 else:
  print('Error de división por cero')
except Exception as e:
 print("Algo salió mal")

Aquí, además de imprimir un mensaje de error para ValueError y ZeroDivisionError, también verificamos qué tipo de error encontramos e imprimimos otro mensaje. Si ejecutamos el código nuevamente, veremos un mensaje adicional relacionado con la excepción atrapada.

¿Cuándo se Debe Manejar Múltiples Excepciones?

En general, manejar múltiples excepciones es ideal si quieres ejecutar el mismo código para excepciones similares, por ejemplo:

  • Solicitudes de red que no se pudieron realizar por diferentes razones. Independientemente de la causa, puedes notificar al usuario que el servidor no está disponible en este momento.
  • Errores de conexión a la base de datos que pueden resultar en varios errores. Y a pesar de que estos errores pueden ser diferentes, el principio de su manejo puede ser el mismo.
  • La entrada y salida de archivos también pueden causar errores que se pueden manejar de la misma manera, por ejemplo, errores de permisos o errores de escritura en el disco.
Error valor y manejo de excepción
Error valor y manejo de excepción
Error de división por 0 y manejo de excepción
Error de división por 0 y manejo de excepción

Conclusión

En este artículo, hemos visto cómo se pueden combinar varios bloques except en uno, atrapando múltiples excepciones al mismo tiempo. Esto puede ayudarte a hacer que tu código sea más legible y fácil de mantener.

Categorizado en:

Python,