python-3.x 隐藏未处理异常的所有控制台输出

cxfofazt  于 5个月前  发布在  Python
关注(0)|答案(1)|浏览(89)

我捕获所有异常并使用loguru logger记录它们。然后我必须重新引发相同的异常以使步骤失败并将信息发送到弹性。

from loguru import logger

@when('some step ...')
def do_something(context, ...):
   try:
       ...
   except Exception as e:
     save_traceback_to_log_file()
     logger.error("Example exception log.")
     raise e

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

字符串
我只想看loguru的日志,不想在控制台输出中看到任何来自未处理异常的回溯或异常消息。
我可以用以下命令来屏蔽追踪:

@contextmanager
def disable_traceback():
    default_value = getattr(sys, "tracebacklimit", 1000)
    sys.tracebacklimit = 0
    yield
    sys.tracebacklimit = default_value
...
    with disable_traceback():
      raise e

的数据
但是我仍然在控制台输出中得到不想要的异常消息:
raise Exception(“Some message...”)

04.12.1999  15:36:47.153 | ERROR    | ... - Exception - Some message...
    When executing the system test "..." ... failed in 0.503s
Exception: Some message...   << don't want


这些方法似乎都不起作用:sys.excepthook、用open(os.devnull,'w')静默Python的stderr、捕获装饰器
我该怎么做?

gzszwxb4

gzszwxb41#

不知道为什么sys.excepthook不适合你,但它正是你正在寻找的,恕我直言。请参阅下面的简单示例。

注意sys.excepthook不支持IPython,参见this问题。

import sys
from loguru import logger

def exception_handler(type, value, traceback):
   pass
sys.excepthook = exception_handler

def func():
   try:
     1/0
   except Exception as ex:
     logger.error("error hello")
     raise ex

func()

字符串
输出:

2024-01-07 12:12:11.791 | ERROR    | __main__:func:13 - error hello

相关问题