由于某种原因,该程序打印以下警告:
Task exception was never retrieved future:exception=SystemExit(2,)>
即使异常被清楚地检索和传播,如caught 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()
Jashandeep S.. 7
SystemExit
似乎是一个特例.例如,如果你举起并抓住一个Exception
,你就不会看到任何错误.解决这个问题的方法似乎是使用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
子类都会以这种方式运行.
SystemExit
似乎是一个特例.例如,如果你举起并抓住一个Exception
,你就不会看到任何错误.解决这个问题的方法似乎是使用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
子类都会以这种方式运行.