Manejo de errores en Python usando decoradores

Decorators en Python es uno de los conceptos más útiles compatibles con Python. Toma funciones como argumentos y también tiene una función anidada. Extienden la funcionalidad de la función anidada. 

Ejemplo:

Python3

# defining decorator function
def decorator_example(func):
    print("Decorator called")
    # defining inner decorator function
    def inner_function():
            print("inner function")
            func()
    return inner_function
   
# defining outer decorator function
@decorator_example
def out_function():
    print("outer function")
out_function()

Producción:

Decorator called
inner function
outer function

Manejo de errores usando decoradores

El siguiente ejemplo muestra cómo se ve un código de manejo de errores general sin el uso de ningún decorador:

Python3

def mean(a,b):
    try:
        print((a+b)/2)
    except TypeError:
        print("wrong data types. enter numeric")
 
 
def square(sq):
    try:
        print(sq*sq)
    except TypeError:
        print("wrong data types. enter numeric")
 
 
def divide(l,b):
    try:
        print(b/l)
    except TypeError:
                print("wrong data types. enter numeric")
mean(4,5)
square(21)
divide(8,4)
divide("two","one")

Producción :

4.5
441
0.5
wrong data types. enter numeric

A pesar de que no hay nada lógicamente incorrecto con el código anterior, carece de claridad. Para hacer que el código sea más limpio y eficiente, se utilizan decoradores para el manejo de errores. El siguiente ejemplo muestra cómo el código anterior puede ser más presentable y comprensible mediante el uso de decoradores:

Python3

def Error_Handler(func):
    def Inner_Function(*args, **kwargs):
        try:
            func(*args, **kwargs)
        except TypeError:
            print(f"{func.__name__} wrong data types. enter numeric")
    return Inner_Function
@Error_Handler
def Mean(a,b):
        print((a+b)/2)
     
@Error_Handler
def Square(sq):
        print(sq*sq)
 
@Error_Handler
def Divide(l,b):
        print(b/l)
     
Mean(4,5)
Square(14)
Divide(8,4)
Square("three")
Divide("two","one")
Mean("six","five")

Producción :

4.5 

196 

0.5 

Cuadre los tipos de datos incorrectos. ingrese numérico 

Divida los tipos de datos incorrectos. ingrese numérico 

Significa tipos de datos incorrectos. ingrese numérico 
 

Publicación traducida automáticamente

Artículo escrito por tedious_wings y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *