gpt4 book ai didi

python-3.x - 为什么这个异常会立即从 asyncio 任务中引发?

转载 作者:行者123 更新时间:2023-12-05 08:54:25 27 4
gpt4 key购买 nike

我从文档中了解到,作为 asyncio.Future 子类的 asyncio.Tasks 将存储其中引发的异常,我可以在闲暇时检索它们。

但是,在此示例代码中,立即引发了异常:

import asyncio

async def bad_task():
raise Exception()

async def test():
loop = asyncio.get_event_loop()
task = loop.create_task(bad_task())
await task

# I would expect to get here
exp = task.exception()
# but we never do because the function exits on line 3

loop = asyncio.get_event_loop()
loop.run_until_complete(test())
loop.close()

示例输出(Python 3.6.5):

python3 ./test.py
Traceback (most recent call last):
File "./test.py", line 15, in <module>
loop.run_until_complete(test())
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/asyncio/base_events.py", line 468, in run_until_complete
return future.result()
File "./test.py", line 9, in test
await task
File "./test.py", line 4, in bad_task
raise Exception()
Exception

这是在异步代码中创建和调用任务的怪癖吗?

最佳答案

await 将引发任务抛出的任何异常,因为它旨在使异步代码看起来几乎与同步代码完全一样。如果您想捕获它们,可以使用普通的 try...except 子句。

关于python-3.x - 为什么这个异常会立即从 asyncio 任务中引发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50052988/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com