Definiendo tus propias excepciones en Python, heredando la clase Exception

Definir una excepci贸n

Antes de ver como se define una excepci贸n, te recomendamos otros de nuestros posts que te ayudar谩n a entenderlo mejor:

En los posts anteriores ver谩s como lanzar y capturar las excepciones. A continuaci贸n explicamos como definirlas.

A pesar de que Python define un conjunto de excepciones por defecto, podr铆an no ser suficientes para nuestro programa. En ese caso, deber铆amos definir nuestra propia excepci贸n.

Si queremos crear una excepci贸n, solamente tenemos que crear una clase que herede de la clase Exception. Es tan sencillo como el siguiente ejemplo.

# Creamos una excepci贸n personalizada
class MiExcepcionPersonalizada(Exception):
    pass

Y ya podr铆amos lanzarla con raise cuando quisi茅ramos.

raise MiExcepcionPersonalizada()

Tambi茅n se pueden pasar par谩metros de entrada al lanzarla. Esto es muy 煤til para dar informaci贸n adicional a la excepci贸n. En el siguiente ejemplo se pasan dos par谩metros. Para ello tenemos que modificar la funci贸n __init__() de la siguiente manera.

# Creamos nuestra propia excepci贸n heredando
# de la clase Exception
class MiExcepcionPersonalizada(Exception):
    def __init__(self, parametro1, parametro2):
        self.parametro1 = parametro1
        self.parametro2 = parametro2

Y una vez hemos creado nuestra excepci贸n, podemos lanzarla con raise como ya hemos visto. Tambi茅n es posible acceder a los par谩metros pasados como argumentos al lanzar la excepci贸n.

# Lanzamos con raise la excepci贸n que hemos creado
try:
    raise MiExcepcionPersonalizada("ValorPar1", "ValorPar2")
except MiExcepcionPersonalizada as ex:
    p1, p2 = ex.args
    print(type(ex))
    print("parametro1 =", p1)
    print("parametro2 =", p2)

#<class '__main__.MiExcepcionPersonalizada'>
#parametro1 = ValorPar1
#parametro2 = ValorPar2

聽Ejemplos

Hay un truco muy interesante que nos permite pasar a la excepci贸n un argumento en forma de diccionario como se muestra a continuaci贸n.

# Se define una excepci贸n
class MiExcepcion(Exception):
    pass

# Se lanza
try:
    raise MiExcepcion({"mensaje":"Mi Mensaje", "informacion":"Mi Informacion"})

# Se captura
except MiExcepcion as e:
    detalles = e.args[0]
    print(detalles)
    print(detalles["mensaje"])
    print(detalles["informacion"])    

#{'mensaje': 'Este es el mensaje', 'informacion': 'Esto es la informacion'}
# Mi Mensaje
# Mi Informacion

Como se puede ver, los par谩metros son accesibles con [] ya que se trata de un diccionario.

Una forma un poco m谩s larga de hacer lo mismo ser铆a se la siguiente manera. En este caso los par谩metros que se pasan no son accesibles como si fueran un diccionario sino como se de un objeto normal se tratase con .mensaje y .informacion

class MiExcepcion(Exception):
    def __init__(self, mensaje, informacion):
        self.mensaje = mensaje
        self.informacion = informacion

try:
    raise MiExcepcion("Mi Mensaje", "Mi Informacion")
except MiExcepcion as e:
    print(e.mensaje)
    print(e.informacion)

N贸tese que para los ejemplos hemos usado mensaje en informacion, pero estas variables pueden ser las que se te ocurran, y por supuesto tampoco tienen porque ser dos, podr铆an ser mas.

¡Deja un comentario!

avatar
  Subscribe  
Notify of