如何对 asyncio.gather() 收集的异常执行 logging.exception()?
How do I do logging.exception() on exceptions gathered by asyncio.gather()?
我非常喜欢logging.exception()
返回的信息,但是这个函数只能在异常处理程序中使用。
现在,运行 asyncio.gather(..., return_exceptions=True)
不会引发异常;相反,异常作为 Exception
个对象返回。
我想用与 logging.exception()
相同的详细信息记录这些 Exceptions
对象,但由于我不在异常处理程序中,我该怎么做?
您可以获取 gather
返回的异常实例并将它们作为 exc_info
传递,例如
results = asyncio.gather(*coros, return_exceptions=True)
for exc in [r for r in results if isinstance(r, BaseException)]
logger.debug("message", exc_info=exc)
这应该给出与 logger.exception("message")
相同的输出。
results = asyncio.gather(*coros, return_exceptions=True)
for exc in [r.exception() for r in results]:
if r:
logger.error("message", exc_info=True)
我非常喜欢logging.exception()
返回的信息,但是这个函数只能在异常处理程序中使用。
现在,运行 asyncio.gather(..., return_exceptions=True)
不会引发异常;相反,异常作为 Exception
个对象返回。
我想用与 logging.exception()
相同的详细信息记录这些 Exceptions
对象,但由于我不在异常处理程序中,我该怎么做?
您可以获取 gather
返回的异常实例并将它们作为 exc_info
传递,例如
results = asyncio.gather(*coros, return_exceptions=True)
for exc in [r for r in results if isinstance(r, BaseException)]
logger.debug("message", exc_info=exc)
这应该给出与 logger.exception("message")
相同的输出。
results = asyncio.gather(*coros, return_exceptions=True)
for exc in [r.exception() for r in results]:
if r:
logger.error("message", exc_info=True)