Digamos que tengo una función asíncrona como esta:
async def foobar(argOne, argTwo, argThree): print(argOne, argTwo, argThree)
Quiero hacer un decorador y usarlo en esta función de manera que envuelva el código anterior en una declaración de prueba excepto como esta:
try: print(argOne, argTwo, argThree) except: print('Something went wrong.)
¿Hay alguna manera de hacer esto?
debido a que wrapper llamó primero, también deberíamos definirlo como una función asíncrona: async def wrap(*arg, **kwargs):
import asyncio def decorator(f): async def wrapper(*arg, **kwargs): try: await f(*arg, **kwargs) except Exception as e: print('Something went wrong.', e) return wrapper @decorator async def foobar(argOne, argTwo, argThree): print(argOne, argTwo, argThree) await asyncio.sleep(1) asyncio.run(foobar("a", "b", "c"))
def deco(coro1): async def coro2(argOne, argTwo, argThree): try: await coro1(argOne, argTwo, argThree) except: print('Something went wrong.') return coro2 @deco async def foobar(argOne, argTwo, argThree): print(argOne, argTwo, argThree)