我遇到了一种情况,我想打破异步 for 循环。我设法将问题减少到下面的应用程序。我希望在退出 main 中的循环时进入上下文管理器的“最后”部分。换句话说,预期的结果是
尝试
第456章
最后
完毕
但我得到的是
尝试
第456章
完毕
最后
然后当应用程序关闭时出现异常。
这是代码
import asyncio
from contextlib import asynccontextmanager
@asynccontextmanager
async def receiving():
try:
print('try')
yield 123
finally:
print('finally')
async def request_all():
async with receiving():
yield 456
async def main():
async for r in request_all():
print(r)
break
print('done')
asyncio.run(main())
Run Code Online (Sandbox Code Playgroud)
我发现这个错误报告看起来很相似,但据我所知,它在 3.8 之前就已得到解决。我在 3.8.2 和 3.9.6 上测试了我的问题