python – asyncio:loop.run_until_complete(loop.create_task(
发布时间:2020-12-20 11:47:52 所属栏目:Python 来源:网络整理
导读:由于某种原因,该程序打印以下警告: Task exception was never retrievedfuture: Task finished coro=coro() done,defined at /usr/lib64/python3.4/asyncio/coroutines.py:139 exception=SystemExit(2,) 即使异常被清楚地检索和传播,就像捕获SystemExit一样
由于某种原因,该程序打印以下警告:
Task exception was never retrieved future: <Task finished coro=<coro() done,defined at /usr/lib64/python3.4/asyncio/coroutines.py:139> exception=SystemExit(2,)> 即使异常被清楚地检索和传播,就像捕获SystemExit一样!打印到终端,进程状态代码变为2. Python 2和trollius也是如此. 我错过了什么吗? #!/usr/bin/env python3 import asyncio @asyncio.coroutine def comain(): raise SystemExit(2) def main(): loop = asyncio.get_event_loop() task = loop.create_task(comain()) try: loop.run_until_complete(task) except SystemExit: print("caught SystemExit!") raise finally: loop.close() if __name__ == "__main__": main() 解决方法
SystemExit似乎是一个特例.例如,如果您引发并捕获异常,则不会看到任何错误.
解决这个问题的方法似乎是使用Task.exception()手动检索异常: import asyncio @asyncio.coroutine def comain(): raise SystemExit(2) def main(): loop = asyncio.get_event_loop() task = loop.create_task(comain()) try: loop.run_until_complete(task) except SystemExit: print("caught SystemExit!") task.exception() raise finally: loop.close() if __name__ == "__main__": main() 编辑 实际上,所有BaseException子类都将以这种方式运行. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |