Python异常日志记录,语法正确吗?

时间:2012-02-14 14:44:22

标签: python logging exception-handling

我正在为一些处理异常的python代码添加日志记录,在下面的示例中,当出现TypeError或AttributeError时,想要记录异常详细信息的正确语法是什么(例如通过logger.exception())?

    try:
        ...
    except (TypeError, AttributeError):
        # want to do a logger.exception(x) here but not sure what to use for x
        ...
        raise CustomError("Unable to parse column status)

2 个答案:

答案 0 :(得分:1)

exception(...)只是一种方便的方法,它可以像其他方法一样接收消息:

def exception(self, msg, *args):
    """
    Convenience method for logging an ERROR with exception information.
    """
    self.error(msg, exc_info=1, *args)

所以你会像

一样使用它
logger.exception("Some error message")

并且日志处理程序将自动添加当前异常的异常信息。仅在异常处理程序中使用它(即在except:块中)!

答案 1 :(得分:0)

如果需要异常详细信息,则需要将异常本身绑定到本地变量,如下所示:

except (TypeError, AttributeError), e:
    # e is the Exception object
    logger.exception(e)

如果你需要根据异常的类型做不同的事情,那么你可以单独捕捉它们:

except TypeError, e:
    logger.exception('There was a Type Error; details are %s' % e)
    # Do something, or raise another exception
except AttributeError, e:
    logger.exception('There was an Attribute Error; details are %s' % e)
    # Do something, or raise another exception

如果您需要有关异常本身上下文的更多信息,请查看sys.exc_info()函数;它可以为您提供追溯,以及有关异常发生位置的详细信息。