Ale*_*kin 5 python error-handling exception python-asyncio
假设我有一个简单的代码:
import asyncio
async def exc():
print(1 / 0)
loop = asyncio.get_event_loop()
loop.create_task(exc())
try:
loop.run_forever()
except KeyboardInterrupt:
loop.stop()
loop.close()
Run Code Online (Sandbox Code Playgroud)
如果我运行它,我会立即收到错误消息
Task exception was never retrieved
future: <Task finished coro=<exc() done, defined at qq.py:4> exception=ZeroDivisionError('division by zero',)>
Traceback (most recent call last):
File "qq.py", line 5, in exc
print(1 / 0)
ZeroDivisionError: division by zero
Run Code Online (Sandbox Code Playgroud)
但是,如果我更改loop.create_task(exc())为task = loop.create_task(exc())
单击ctrl + c后,我会收到相同的错误消息
为什么任务分配会更改错误输出的时间?
asyncio.Future可以使用检索Task中的异常(确切地说是基础)Future.exception()。如果未检索到该异常,则将在释放Future带有eventloop's 的对象时处理该异常call_exception_handler。
因此,正如@dim所指出的,虽然Task具有引用(在您的情况下分配给变量),但是它不会被释放,因此del task_future不会被调用,也不会执行循环的处理程序。
| 归档时间: |
|
| 查看次数: |
4000 次 |
| 最近记录: |