Python 如何让协同程序停止并打印错误消息
我有两个协同程序,其中cou2有一些bug,当我运行它时,cou2只是停止打印,cou1将继续运行,没有错误消息。如何让程序在出现任何错误消息/警告时停止并打印消息,以便进行修复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():
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()])
致:
因为它提供直接的结果而不是间接的未来对象,所以它将在第一个异常时停止并将其传播给等待者。异常将冒泡上升到顶层,解释器将在顶层提取异常,并报告异常,同时进行合理的回溯