如何在python中的if语句中记录手动引发的异常

时间:2017-05-18 23:19:12

标签: python exception-handling

简单地说,我有一段看起来像这样的代码:

if some_condition_that_evals_to_True:
    raise ValueError("Error message")

我想要做的是插入记录整个异常的日志记录语句,但这样做只会保存记录器消息:

if some_condition_that_evals_to_True:
    logger.error("Logged error message")
    raise ValueError("Error message")

任何人都知道如何保存整个错误消息,包括ValueError?

编辑:

以下是我要重新创建的内容:

if some_condition_that_evals_to_True:
    try:
        raise ValueError("Error with value")
    except ValueError:
        logger.exception("Logging Error with Value")
        raise 

但这似乎是一种迂回的方式来获得我想要的行为,所以另一种方式来表达我的问题:是否有更优雅的方式获得与上述代码块相同的行为?

1 个答案:

答案 0 :(得分:2)

使用logging module时尝试stack_info关键字参数:

import logging
logging.basicConfig(filename='example.log',level=logging.DEBUG)
if True:
    logging.error('Error Message', stack_info=True)
    raise ValueError('Custom Error Message')

运行它显示以下内容:

J:\>python log_stack.py
Traceback (most recent call last):
  File "log_stack.py", line 5, in <module>
    raise ValueError('Custom Error Message')
ValueError: Custom Error Message

J:\>more example.log
ERROR:root:Error Message
Stack (most recent call last):
  File "log_stack.py", line 4, in <module>
    logging.error('Error Message', stack_info=True)