[英]How do I do logging.exception() on exceptions gathered by asyncio.gather()?
我非常喜歡logging.exception()
返回的信息,但是這個 function 只能在異常處理程序中使用。
現在,運行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")
相同的 output 。
results = asyncio.gather(*coros, return_exceptions=True)
for exc in [r.exception() for r in results]:
if r:
logger.error("message", exc_info=True)
您可以使用 exc_info 迭代 gather 和 log 錯誤返回的結果
results = await asyncio.gather(*batch, return_exceptions=True)
for res in results:
if isinstance(res, BaseException):
logger.exception('Task exception', exc_info=res)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.