我正在为一些处理异常的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)
答案 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()
函数;它可以为您提供追溯,以及有关异常发生位置的详细信息。