繁体   English   中英

如何从 Python 中的异步函数访问返回值?

[英]How do I access the return value from an async function in Python?

如果我尝试在 Python 中运行以下代码,则会收到以下错误:

async def foo():
    yield 1

async def bar():
    x = await foo()
b=bar()
b.send(None)

类型错误:对象 async_generator 不能在“await”表达式中使用

另一方面,以下代码有效(并抛出 StopIteration,但这是意料之中的):

async def foo():
    pass

async def bar():
    await foo()
b=bar()
b.send(None)

为什么这不起作用?

如果我将foo替换为:

@coroutine
def foo():
    yield 1

这里的问题是这看起来很奇怪,我很确定这不是获得这种行为的推荐方式。 然后在大多数语言中,您只需要 async 和 await,而不是 @coroutine !

我在这里假设您正在使用asyncio库。
我认为出于与async def函数的兼容性原因,建议使用装饰器@coroutine

虽然这并没有严格执行。

asyncio.coroutine 文档

@asyncio.coroutine装饰器来标记基于生成器的协程。 这使生成器可以使用 yield from 调用 async def 协程,并且还使生成器能够被 async def 协程调用,例如使用 await 表达式

不需要自己装饰 async def 协程。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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