我想编写一个可以同时使用生成器和等待函数的装饰器。像这样:
def deco(function):
async def wrapper(*args, **kwargs):
try:
print('\tTEST: Without errors!')
if inspect.isasyncgenfunction(function):
async def gen():
async for i in function(*args, **kwargs):
yield i
return gen()
else:
return await function(*args, **kwargs)
except (
ZeroDivisionError
) as e:
print('\tTEST: Handle error!')
return wrapper
但我不知道如何在同一个函数中使用 yield 和 return。 为此,我创建了 gen 函数,以便异步生成器返回值不会出错。
@deco
async def generator_functional(messages, flag="Default"):
for message in messages:
if message == "3":
raise ZeroDivisionError
yield f'processed: {message} | {flag} | '
return
在代码中我需要等待一个生成器
async for item in await generator_functional(data):
print(item)
但我需要像这样使用它
async for item in generator_functional(data):
print(item)
使用可等待函数,代码运行良好。