Python 如何从异步IO函数传播异常?

Python 如何从异步IO函数传播异常?,python,python-3.x,python-asyncio,Python,Python 3.x,Python Asyncio,我使用的是asyncio,我注意到在异步函数中不会引发异常 我已经创建了一个我所面临问题的示例,其中我的异步函数如下所示: async def async_fun(foo): 尝试: get\u foo=等待一些东西\u异步(bar) 例外情况除外,如E: raise E#不引发异常:( 我像这样收集和运行: async def main(): 等待asyncio.gather(async_-fun(“baz”),返回异常=True) asyncio.run(main()) 如何从async

我使用的是asyncio,我注意到在异步函数中不会引发异常

我已经创建了一个我所面临问题的示例,其中我的异步函数如下所示:

async def async_fun(foo):
尝试:
get\u foo=等待一些东西\u异步(bar)
例外情况除外,如E:
raise E#不引发异常:(
我像这样收集和运行:

async def main():
等待asyncio.gather(async_-fun(“baz”),返回异常=True)
asyncio.run(main())

如何从
async\u-fun
传播异常?如果发生异常,我希望能够引发异常。如果需要,我乐意提供更多信息。

return\u exceptions=True
明确告诉
asyncio.gather()
返回由可等待项引发的异常,而不是传播它们(这是默认行为)。由于未检查
asyncio.gather()
的返回值,因此无法注意到异常

要解决此问题,只需从调用
asyncio.gather
中删除
return\u exceptions=True

async def main():
    await asyncio.gather(async_fun("baz"))

还请注意,如果您只等待一个函数,
asyncio.gather
是不必要的,因此上面的内容可以写得更简短,因为
wait async_fun(“baz”)

try loop=asycio.get_event_loop()group=asyncio.gather(async_fun(“baz”),return_exceptions=True)loop