Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial programming >> python

Excepciones personalizadas de Python

Excepciones personalizadas de Python

En este tutorial, aprenderá a definir excepciones personalizadas según sus requisitos con la ayuda de ejemplos.

Python tiene numerosas excepciones integradas que obligan a su programa a generar un error cuando algo sale mal.

Sin embargo, a veces es posible que deba crear sus propias excepciones personalizadas que sirvan a su propósito.


Creando excepciones personalizadas

En Python, los usuarios pueden definir excepciones personalizadas creando una nueva clase. Esta clase de excepción debe derivarse, ya sea directa o indirectamente, del Exception integrado clase. La mayoría de las excepciones integradas también se derivan de esta clase.

>>> class CustomError(Exception):
...     pass
...

>>> raise CustomError
Traceback (most recent call last):
...
__main__.CustomError

>>> raise CustomError("An error occurred")
Traceback (most recent call last):
...
__main__.CustomError: An error occurred

Aquí, hemos creado una excepción definida por el usuario llamada CustomError que hereda del Exception clase. Esta nueva excepción, como otras excepciones, se puede generar usando el raise declaración con un mensaje de error opcional.

Cuando estamos desarrollando un programa grande de Python, es una buena práctica colocar todas las excepciones definidas por el usuario que genera nuestro programa en un archivo separado. Muchos módulos estándar hacen esto. Definen sus excepciones por separado como exceptions.py o errors.py (generalmente pero no siempre).

La clase de excepción definida por el usuario puede implementar todo lo que puede hacer una clase normal, pero generalmente las hacemos simples y concisas. La mayoría de las implementaciones declaran una clase base personalizada y derivan otras clases de excepción de esta clase base. Este concepto se aclara en el siguiente ejemplo.


Ejemplo:excepción definida por el usuario en Python

En este ejemplo, ilustraremos cómo se pueden usar las excepciones definidas por el usuario en un programa para generar y detectar errores.

Este programa le pedirá al usuario que ingrese un número hasta que adivine correctamente un número almacenado. Para ayudarlos a resolverlo, se proporciona una pista sobre si su suposición es mayor o menor que el número almacenado.

# define Python user-defined exceptions
class Error(Exception):
    """Base class for other exceptions"""
    pass


class ValueTooSmallError(Error):
    """Raised when the input value is too small"""
    pass


class ValueTooLargeError(Error):
    """Raised when the input value is too large"""
    pass


# you need to guess this number
number = 10

# user guesses a number until he/she gets it right
while True:
    try:
        i_num = int(input("Enter a number: "))
        if i_num < number:
            raise ValueTooSmallError
        elif i_num > number:
            raise ValueTooLargeError
        break
    except ValueTooSmallError:
        print("This value is too small, try again!")
        print()
    except ValueTooLargeError:
        print("This value is too large, try again!")
        print()

print("Congratulations! You guessed it correctly.")

Aquí hay una muestra de ejecución de este programa.

Enter a number: 12
This value is too large, try again!

Enter a number: 0
This value is too small, try again!

Enter a number: 8
This value is too small, try again!

Enter a number: 10
Congratulations! You guessed it correctly.

Hemos definido una clase base llamada Error .

Las otras dos excepciones (ValueTooSmallError y ValueTooLargeError ) que genera nuestro programa se derivan de esta clase. Esta es la forma estándar de definir excepciones definidas por el usuario en la programación de Python, pero no está limitado solo a esta forma.


Personalización de clases de excepción

Podemos personalizar aún más esta clase para aceptar otros argumentos según nuestras necesidades.

Para aprender a personalizar las clases de excepción, debe tener los conocimientos básicos de programación orientada a objetos.

Visite Programación orientada a objetos de Python para comenzar a aprender acerca de la programación orientada a objetos en Python.

Veamos un ejemplo:

class SalaryNotInRangeError(Exception):
    """Exception raised for errors in the input salary.

    Attributes:
        salary -- input salary which caused the error
        message -- explanation of the error
    """

    def __init__(self, salary, message="Salary is not in (5000, 15000) range"):
        self.salary = salary
        self.message = message
        super().__init__(self.message)


salary = int(input("Enter salary amount: "))
if not 5000 < salary < 15000:
    raise SalaryNotInRangeError(salary)

Salida

Enter salary amount: 2000
Traceback (most recent call last):
  File "<string>", line 17, in <module>
    raise SalaryNotInRangeError(salary)
__main__.SalaryNotInRangeError: Salary is not in (5000, 15000) range

Aquí, hemos anulado el constructor del Exception clase para aceptar nuestros propios argumentos personalizados salary y message . Luego, el constructor del padre Exception la clase se llama manualmente con el self.message argumento usando super() .

El self.salary personalizado atributo se define para ser utilizado más tarde.

El __str__ heredado método del Exception La clase se usa para mostrar el mensaje correspondiente cuando SalaryNotInRangeError está elevado.

También podemos personalizar el __str__ método en sí anulándolo.

class SalaryNotInRangeError(Exception):
    """Exception raised for errors in the input salary.

    Attributes:
        salary -- input salary which caused the error
        message -- explanation of the error
    """

    def __init__(self, salary, message="Salary is not in (5000, 15000) range"):
        self.salary = salary
        self.message = message
        super().__init__(self.message)

    def __str__(self):
        return f'{self.salary} -> {self.message}'


salary = int(input("Enter salary amount: "))
if not 5000 < salary < 15000:
    raise SalaryNotInRangeError(salary)

Salida

Enter salary amount: 2000
Traceback (most recent call last):
  File "/home/bsoyuj/Desktop/Untitled-1.py", line 20, in <module>
    raise SalaryNotInRangeError(salary)
__main__.SalaryNotInRangeError: 2000 -> Salary is not in (5000, 15000) range

Para obtener más información sobre cómo manejar las excepciones en Python, visite Manejo de excepciones de Python.


python

  1. Tipos de datos de Python
  2. Operadores de Python
  3. Declaración de paso de Python
  4. Argumentos de la función de Python
  5. Diccionario de Python
  6. Errores de Python y excepciones integradas
  7. Programación orientada a objetos de Python
  8. Herencia de Python
  9. Iteradores de Python
  10. type() y isinstance() en Python con ejemplos
  11. Python - Manejo de excepciones