只是为了提到:
asyncio.Task
对象具有方法
result
和
exception
.
结果
:
[…]如果协同程序引发异常,则该异常为
重新提出[…]
例外
:
[…]如果包装的协同程序引发异常,则该异常为
返回[…]
给定一个简单的设置(在Python3.7语法中):
import asyncio
tasks =[]
async def bad_test():
raise ValueError
async def good_test():
return
async def main():
tasks.append(asyncio.create_task(bad_test()))
tasks.append(asyncio.create_task(good_test()))
asyncio.run(main())
使用
结果
,一个人可以:
for t in tasks:
try:
f = t.result()
except ValueError as e:
logger.exception("we're all doomed")
或者,使用
例外
:
for t in tasks:
if isinstance(t.exception(), Exception):
logger.exception("apocalypse now")
但是,这两种方法都需要
Task
否则:
如果任务已被取消,此方法将引发CancelleDerror
例外。
(
结果
):如果任务的结果尚不可用,则此方法将引发
InvalidStateERROR异常。
(
例外
):如果任务尚未完成,则此方法引发InvalidStateError异常。
因此,与另一个答案中的建议不同,日志记录不会在任务中出现异常时发生,而是在任务完成后进行评估时发生。