Excepciones definidas por el usuario en Python con ejemplos

Excepciones definidas por el usuario en Python con ejemplos

Las excepciones definidas por el usuario se crean definiendo una nueva clase que hereda de Excepción incorporada de Python clase o una de sus subclases. Al hacer esto, podemos crear mensajes de error personalizados y manejar errores específicos de una manera que tenga sentido para nuestra aplicación.

Pasos para crear y utilizar excepciones definidas por el usuario

Siga estos pasos para crear y utilizar excepciones definidas por el usuario en Python:

  • Defina una nueva clase de excepción: Cree una nueva clase que herede de Exception o cualquiera de sus subclases.
  • Plantear la excepción: Utilice la declaración de aumento para generar la excepción definida por el usuario cuando ocurre una condición específica.
  • Manejar la excepción: Utilice bloques try-except para manejar la excepción definida por el usuario.

Ejemplo: En este ejemplo, creamos una excepción personalizada InvalidAgeError para garantizar que los valores de edad se encuentren dentro de un rango válido (0–120).

Python
   # Step 1: Define a custom exception class   class   InvalidAgeError  (  Exception  ):   def   __init__  (  self     age     msg  =  'Age must be between 0 and 120'  ):   self  .  age   =   age   self  .  msg   =   msg   super  ()  .  __init__  (  self  .  msg  )   def   __str__  (  self  ):   return   f  '  {  self  .  age  }   ->   {  self  .  msg  }  '   # Step 2: Use the custom exception in your code   def   set_age  (  age  ):   if   age    <   0   or   age   >   120  :   raise   InvalidAgeError  (  age  )   else  :   print  (  f  'Age set to:   {  age  }  '  )   # Step 3: Handling the custom exception   try  :   set_age  (  150  )   # This will raise the custom exception   except   InvalidAgeError   as   e  :   print  (  e  )   

Producción
150 -> Age must be between 0 and 120  

Explicación:

  • La clase InvalidAgeError hereda de Exception. Define un __caliente__ Método para aceptar edad y mensaje.
  • El método __str__ devuelve una representación de cadena legible del error.
  • En set_age(), si la edad está fuera del rango válido (0–120), se genera la excepción.
  • El bloque try-except detecta la excepción e imprime el mensaje de error.

Personalización de clases de excepción

Cuando creamos una excepción personalizada, subclasificamos la clase Exception incorporada de Python (o una subclase como ValueError TypeError, etc.). Luego podemos agregar nuestros propios métodos de atributos o lógica personalizada para que nuestra excepción sea más informativa.

También podemos mejorar las excepciones personalizadas agregando atributos adicionales o anulando métodos.

Ejemplo: Aquí mejoramos InvalidAgeError agregando un código de error y personalizando el mensaje de error.

Python
   class   InvalidAgeError  (  Exception  ):   def   __init__  (  self     age     msg  =  'Age must be between 0 and 120'     error_code  =  1001  ):   self  .  age   =   age   self  .  msg   =   msg   self  .  error_code   =   error_code   super  ()  .  __init__  (  self  .  msg  )   def   __str__  (  self  ):   return   f  '[Error Code   {  self  .  error_code  }  ]   {  self  .  age  }   ->   {  self  .  msg  }  '   try  :   set_age  (  150  )   # This will raise the custom exception   except   InvalidAgeError   as   e  :   print  (  e  )   

Producción
[Error Code 1001] 150 -> Age must be between 0 and 120  

Explicación:

  • InvalidAgeError ahora tiene un atributo adicional código_error.
  • El método __str__ se anula para mostrar tanto el código de error como la edad.
  • Cuando se ejecuta set_age(150), la excepción se genera y se captura en el bloque try-except.
  • El mensaje de error personalizado se imprime haciendo que el error sea más descriptivo.

Usar excepciones estándar como clase base

A veces, en lugar de heredar directamente de Exception, podemos crear una excepción personalizada subclasificando una excepción estándar como RuntimeError ValueError, etc. Esto es útil cuando su excepción personalizada debe tratarse como un tipo específico de error.

Ejemplo: Este ejemplo muestra cómo crear una excepción personalizada NetworkError heredando de RuntimeError, que es una excepción estándar incorporada.

Python
   # NetworkError has base RuntimeError and not Exception   class   NetworkError  (  RuntimeError  ):   def   __init__  (  self     arg  ):   self  .  args   =   (  arg  )   # store as tuple   try  :   raise   NetworkError  (  'Connection failed'  )   except   NetworkError   as   e  :   print  (  e  .  args  )   

Producción
('Connection failed')  

Explicación:

  • NetworkError hereda de RuntimeError, que es un tipo de excepción integrado.
  • Cuando se genera, el mensaje se almacena en el atributo args como una tupla.
  • Se detecta la excepción y se muestran sus argumentos almacenados.

Ejemplo del mundo real: error de correo electrónico no válido

A continuación se muestra un ejemplo sencillo en el que generamos una excepción personalizada si la dirección de correo electrónico no es válida:

Python
   class   InvalidEmailError  (  Exception  ):   def   __init__  (  self     email     msg  =  'Invalid email format'  ):   self  .  email   =   email   self  .  msg   =   msg   super  ()  .  __init__  (  self  .  msg  )   def   __str__  (  self  ):   return   f  '  {  self  .  email  }   ->   {  self  .  msg  }  '   def   set_email  (  email  ):   if   '@'   not   in   email  :   raise   InvalidEmailError  (  email  )   print  (  f  'Email set to:   {  email  }  '  )   try  :   set_email  (  'userexample.com'  )   except   InvalidEmailError   as   e  :   print  (  e  )   

Producción
userexample.com -> Invalid email format  

Explicación:

  • Se define una nueva clase de excepción InvalidEmailError para validar direcciones de correo electrónico.
  • Si el correo electrónico proporcionado no contiene '@', se genera la excepción.
  • El bloque try-except detecta el error e imprime el mensaje formateado.

¿Cuándo utilizar excepciones definidas por el usuario?

Las excepciones definidas por el usuario se deben considerar en los siguientes escenarios:

  • Representar errores específicos en una aplicación (por ejemplo, InvalidAgeError DatabaseConnectionError).
  • Proporcionar mensajes de error más claros y descriptivos.
  • Manejar un grupo de errores relacionados por separado usando excepto.

Al utilizar excepciones definidas por el usuario, los programas se vuelven más legibles, fáciles de mantener y más fáciles de depurar.

Prueba sugerida Editar cuestionario 3 preguntas

¿Qué sucede si una excepción definida por el usuario hereda de RuntimeError en lugar de Exception?

  • A

    No puede ser atrapado usando excepto

  • B

    Se convierte en una excepción no controlada.

  • do

    Los controladores lo tratan como un error relacionado con el tiempo de ejecución.

  • D

    Pierde atributos personalizados.

Explicación:

Heredar de RuntimeError permite manejarlo como un error de tiempo de ejecución y también como uno personalizado.

¿Por qué se usa comúnmente super().__init__(self.msg) en clases de excepción personalizadas?

  • A

    Para evitar la herencia múltiple

  • B

    Para inicializar correctamente la clase de excepción base

  • do

    Para anular el rastreo

  • D

    Para generar automáticamente la excepción

Explicación:

Llamar a super() garantiza que la excepción base se inicialice correctamente con el mensaje.

¿Qué se imprimirá si una excepción personalizada anula __str__() y se imprime dentro excepto?

  • A

    La representación de cadena anulada

  • B

    Dirección de memoria de la excepción.

  • do

    Solo el nombre de la clase

  • D

    Nada a menos que se use repr()

Explicación:

print(e) llama a __str__() del objeto de excepción.

Excepciones definidas por el usuario en Python con ejemplosPrueba completada con éxito Su puntuación:   2 /3 Exactitud :  0% Inicie sesión para ver la explicación 1 /3 1 /3 < Previous Siguiente >