我捕获所有异常并使用 loguru 记录器记录它们。然后我必须重新引发相同的异常以使该步骤失败并将信息发送到弹性。
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
但我仍然在控制台输出中收到不需要的异常消息:
引发异常(“一些消息......”)
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、捕获装饰器
我该怎么做?
sys.excepthook
不适合你,但这正是你正在寻找的,恕我直言。请参阅下面的简单示例。
注意:
sys.excepthook
不适用于 IPython。请参阅这个问题。
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