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