Python 如何让协同程序停止并打印错误消息

Python 如何让协同程序停止并打印错误消息,python,debugging,python-asyncio,Python,Debugging,Python Asyncio,我有两个协同程序,其中cou2有一些bug,当我运行它时,cou2只是停止打印,cou1将继续运行,没有错误消息。如何让程序在出现任何错误消息/警告时停止并打印消息,以便进行修复 import asyncio async def co_1(): while True: await asyncio.sleep(2) print('co1111111111111111111111111111111111111') async def co_2():

我有两个协同程序,其中cou2有一些bug,当我运行它时,cou2只是停止打印,cou1将继续运行,没有错误消息。如何让程序在出现任何错误消息/警告时停止并打印消息,以便进行修复

import asyncio

async def co_1():
    while True:
        await asyncio.sleep(2)
        print('co1111111111111111111111111111111111111')

async def co_2():
    while True:
        await asyncio.sleep(3)
        print('co222222222222222222222222222222222222 ')
        a=numpy.zeros(4,4) # bug, didn't import numpy
        pritn(a) # bug typo

async def await_list():
    await asyncio.wait([co_1(),co_2()])

if __name__ == '__main__':
    loop=asyncio.get_event_loop()
    loop.run_until_complete(await_list())


问题是
asyncio.wait()
返回未来的对象,这些对象封装了运行这两个协程的结果。一个协同程序引发异常,另一个返回值是完全合法的。由于您请求等待两个协同程序完成(默认设置),因此
wait_列表中的wait将继续等待
co_1

最简单的修复方法是更改:

await asyncio.wait([co_1(),co_2()])
致:


因为它提供直接的结果而不是间接的未来对象,所以它将在第一个异常时停止并将其传播给等待者。异常将冒泡到顶层,解释器将在顶层拾取异常,并报告异常,同时进行合理的回溯。

问题在于
asyncio.wait()
返回封装运行这两个协程的结果的未来对象。一个协同程序引发异常,另一个返回值是完全合法的。由于您请求等待两个协同程序完成(默认设置),因此
wait_列表中的wait将继续等待
co_1

最简单的修复方法是更改:

await asyncio.wait([co_1(),co_2()])
致:

因为它提供直接的结果而不是间接的未来对象,所以它将在第一个异常时停止并将其传播给等待者。异常将冒泡上升到顶层,解释器将在顶层提取异常,并报告异常,同时进行合理的回溯