use*_*803 4 python logging exception python-asyncio python-logging
我希望我的代码使用 pythonlogging来记录异常。在我通常使用的代码中await,通常会引发异常,因此:
try:
await code_that_can_raise()
except Exception as e:
logger.exception("Exception happended")
工作正常。
然而,当使用
loop.create_task(coro())
我不确定如何在此处捕获异常。
包装 create_task() 调用显然不起作用。在代码中记录每个异常的最佳解决方案是什么?
在代码中记录每个异常的最佳解决方案是什么?
如果您控制 的调用create_task,但不控制 中的代码coro(),那么您可以编写一个日志记录包装器:
async def log_exceptions(awaitable):
try:
return await awaitable
except Exception:
logger.exception("Unhandled exception")
Run Code Online (Sandbox Code Playgroud)
然后你可以打电话loop.create_task(log_exceptions(coro()))。
如果您不能或不想包装 every create_task,则可以调用loop.set_exception_handler,将异常设置为您自己的函数,该函数将根据您的需要记录异常。