我编写了一个 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)
如果我在最后一行设置断点并e
在 eclipse 的监视窗口中进行检查,我会得到KeyError: 'Something'
,但str(e)
结果'Something'
非常无益。
我用谷歌搜索,我找不到任何方法从异常中获取正确的消息。显然在 v<2.4 中曾经有 a .message
,但这对我在 3.3 中没有帮助
作为替代方案,我尝试这样做:
Ret['Exception'] = str(type(e)) + ": " + str(e)
这导致<class 'KeyError'>: 'job'
which 更接近一点,但它开始感觉越来越 hackish。
我还想包含一个堆栈跟踪,但那里的运气更差 - 我可以得到__traceback__
但当然它不是可序列化的,并且调用str()
它只会导致对象的描述,例如<traceback object at 0x0000000004024E48>
如何获得体面/全面的错误消息?