簡體   English   中英

如何對 asyncio.gather() 收集的異常執行 logging.exception()?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM