【发布时间】:2015-03-17 08:10:11
【问题描述】:
我使用下一个代码在我的 Flask 应用程序中捕获未捕获的异常:
@app.errorhandler(Exception)
def uncaught_exception_handler(error):
if not app.config['DEVELOPMENT']:
app.logger.error(error, exc_info=True)
else:
raise error
return 'Internal Server Error', 500
如何将有关每个堆栈帧中变量值的额外信息添加到我的日志文件中?看起来cgitb 正在做想要的事情,但它会将错误信息打印到标准输出或文件,而不是作为字符串返回。我知道使用 inspect 和 traceback 模块可以做我想做的事情,但由于这是 Python,我认为已经存在针对此类问题的适当解决方案。
【问题讨论】:
-
您可以根据需要转储
locals()或globals()。 -
如果不是当前堆栈帧呢?我应该为每一帧手动调用 locals() 吗?
-
您所说的“不是当前”是什么意思?您希望捕获的变量是什么?
-
当异常被引发时(正是在那个时候)程序有深度为 n 的调用堆栈。对我来说,当前框架是引发异常的那个框架。调用者的框架(调用引发异常的函数的函数)也有自己的堆栈框架(深度 n-1)。等等。我想在每一帧中获取每个局部变量的值。就像 cgitb 在 this example 中那样做。
-
好吧我明白你的意思了,基本上你想要全栈,你可能对这个SO Answer感兴趣
标签: python debugging logging exception-handling stack-trace