【发布时间】:2013-04-08 18:58:38
【问题描述】:
我编写了一个 API,它以以下格式返回 Json...
{"Success": true, Result: {...}}
{"Success": false, ExceptionId: "(some uuid)"}
记录异常。这原则上允许某人讨论错误而我们从来没有告诉他们它是什么(作为安全措施)。在调试过程中,我还想输出错误消息以阻止我一直引用数据库。
目前的问题是从异常中获取有用信息(返回或登录数据库)
我正在做这样的事情......
try:
Ret['Result'] = <Blah>
Ret['Success'] = True
except Exception as e:
# ... Logging/ExceptionId
if Settings.DebugMode:
Ret['Exception'] = str(e)
如果我在最后一行设置断点并在 Eclipse 的监视窗口中检查 e,我会得到 KeyError: 'Something',但 str(e) 会导致 'Something',这非常无用。
我在谷歌上搜索过,但找不到任何从异常中获取正确消息的方法。显然在 v.message 但这对我在 3.3 中没有帮助
作为替代方案,我尝试这样做:
Ret['Exception'] = str(type(e)) + ": " + str(e)
这导致<class 'KeyError'>: 'job' 更接近一点,但它开始感觉越来越黑客。
我还想包含一个堆栈跟踪,但那里的运气更差 - 我可以得到 __traceback__ 但当然它不是可序列化的,并且在它上面调用 str() 只会导致对象的描述,例如 @987654332 @
我怎样才能得到一个体面/全面的错误信息?
【问题讨论】:
标签: python exception python-3.x