简体   繁体   中英

How do I make a decorator to wrap an async function with a try except statement?

Let's say I have an async function like this:

async def foobar(argOne, argTwo, argThree):
   print(argOne, argTwo, argThree)

I want to make a decorator and use it on this function in a way that it wraps the above code in a try except statement like this:

try:
   print(argOne, argTwo, argThree)
except:
   print('Something went wrong.)

Is there any way to do this?

because wrapper called first, we should also define it as a async function: 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)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM