我想停止程序,即事件循环,如果任何任何任务在任何地方引发未处理的异常 . 正常行为是您收到 Task exception was never retrieved
错误消息并且单个任务停止,但循环继续运行所有其他任务 .
例如:
import asyncio
async def foo():
while True:
await asyncio.sleep(1)
print("hi")
async def bug():
await asyncio.sleep(2)
raise TypeError
loop = asyncio.get_event_loop()
loop.create_task(foo())
loop.create_task(bug())
loop.run_forever()
输出:
"hi"
"hi"
Task exception was never retrieved
future: <Task finished coro=<bug() done, defined at <...>:9> exception=TypeError()>
Traceback (most recent call last):
File "<ipython-input-4-bd8651340a75>", line 11, in bug
raise TypeError
TypeError
"hi"
"hi"
"hi"
...
我的项目包含许多分布在许多文件上的协同程序,这些协同程序使用 loop.create_task(foo())
将它们互相添加到循环中,因此它们彼此不相同,所以不能简单地处理主文件中的一个或两个入口点协程并且会出现错误 .
1 回答
我想've found what I'我正在寻找
loop.set_exception_handler(handler)