隐藏所有未处理的异常控制台输出

问题描述 投票:0回答:2

我捕获所有异常并使用 loguru 记录器记录它们。然后我必须重新引发异常。

from loguru import logger

except Exception as e:
  logger.error("Example exception log.")
  raise e

------------------------
Console output:
...
... Example exception log.

我只想查看 loguru 的日志。我不希望在控制台输出中引发未处理的异常而产生任何异常的回溯或消息。

我该怎么做?

python logging output loguru
2个回答
1
投票

抑制异常处理程序的一种方法是重写它。 Python 允许您设置自定义函数来处理未捕获的异常。这意味着您可以记录异常而不打印回溯。

这是一个小例子:

import sys
from loguru import logger

def handle_exception(exc_type, exc_value, exc_traceback):
    if issubclass(exc_type, KeyboardInterrupt): #handle "CTRL+C", you probably still want this.
        sys.__excepthook__(exc_type, exc_value, exc_traceback)
        return

    logger.error("Uncaught exception", exc_info=(exc_type, exc_value, exc_traceback))

sys.excepthook = handle_exception

# ...

抑制回溯和异常详细信息可能会使理解和解决问题变得更加困难,假设您意识到这一点,上述实现应该适用于您的情况。


0
投票
  1. 将 loguru 重定向到 stdout 而不是 stderr:
logger.add(sys.stdout, format="...")
  1. 沉默Python的stderr
import os
import sys
f = open(os.devnull, 'w')
sys.stderr = f

请注意,它完全消除了此进程中的 stderr,因此它会导致对也使用 stderr 的任何其他模块进行意外更改。

© www.soinside.com 2019 - 2024. All rights reserved.