4.1 Captura de múltiples excepciones
Python permite manejar múltiples excepciones utilizando varios bloques except o un solo bloque except con una tupla de excepciones. Vamos a ver ambos enfoques.
Varios bloques except
Puedes usar varios bloques except para manejar diferentes tipos de excepciones de distintas maneras.
try:
# Código que puede lanzar una excepción
result = int("abc")
except ValueError:
print("Error: valor incorrecto.")
except ZeroDivisionError:
print("Error: división por cero.")
Un solo bloque except con una tupla de excepciones
Puedes manejar varias excepciones en un solo bloque except, pasándolas como una tupla.
try:
# Código que puede lanzar una excepción
result = int("abc")
except (ValueError, ZeroDivisionError) as e:
print(f"Ocurrió un error: {e}")
Uso de except NameError as var
Al manejar excepciones puedes usar la sintaxis except <ExceptionType> as <variable> para obtener el objeto de la excepción. Esto te permite acceder a la información de la excepción, como el mensaje de error y otros atributos.
try:
# Código que puede lanzar NameError
print(undeclared_variable)
except NameError as e:
print(f"Ocurrió un error: {e}")
print(f"Tipo de error: {type(e)}")
4.2 Alcance de la variable de error
La variable que almacena la excepción (e en el ejemplo anterior), está disponible solo dentro de su bloque except. Fuera de este bloque, la variable no está disponible.
try:
# Código que puede lanzar NameError
print(undeclared_variable)
except NameError as e:
print(f"Ocurrió un error: {e}")
print(f"Tipo de error: {type(e)}")
# Aquí e ya no está disponible y la siguiente línea lanzará NameError
# print(e) # NameError: name 'e' is not defined
Si quieres hacer algo importante con la excepción fuera de su bloque, entonces necesitas guardarla en una variable separada. Ejemplo:
exception = None
try:
# Código que puede lanzar una excepción
result = int("abc")
except ValueError as e:
exception = e
print("Error: valor incorrecto.")
except ZeroDivisionError as e:
exception = e
print("Error: división por cero.")
print(exception)
Nota que la variable exception guarda la última excepción ocurrida, lo que puede ser útil para su posterior manejo fuera del bloque try.
4.3 Qué información útil se puede encontrar en un error
El objeto de excepción contiene información sobre el error. Dependiendo del tipo de excepción, el objeto puede contener diversos atributos.
Estos son algunos atributos comunes accesibles para la mayoría de las excepciones:
-
args: Tupla que contiene los argumentos pasados al crear la excepción. Normalmente es el mensaje de error. -
message: Cadena que contiene el mensaje de error (en algunas excepciones). -
__str__: Método que devuelve la representación en cadena de la excepción. Este método se usa para obtener la representación textual del error, que será devuelta al usar la funciónprint()en el objeto de la excepción.
Ejemplo:
try:
# Código que puede lanzar ValueError
result = int("abc")
except ValueError as e:
print(f"Ocurrió un error: {e}")
print(f"Argumentos del error: {e.args}")
print(f"Mensaje de error: {str(e)}")
Ejemplo de manejo de múltiples excepciones
try:
# Código que puede lanzar varios tipos de excepciones
result = 10 / 0
except (ValueError, ZeroDivisionError) as e:
print(f"Ocurrió un error: {e}")
print(f"Tipo de error: {type(e)}")
print(f"Argumentos del error: {e.args}")
Si ocurre un ValueError o un ZeroDivisionError, será capturado por el bloque except. La información de la excepción estará disponible a través de la variable e. La salida incluirá el tipo de error y los argumentos pasados al crear la excepción.
GO TO FULL VERSION