我编写了一个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'
,这是非常无益的。
我用Google搜索,我找不到任何方法从异常中获取正确的消息。显然曾经有过v {2.4的.message
但在3.3中对我没有帮助
作为替代方案,我尝试过:
Ret['Exception'] = str(type(e)) + ": " + str(e)
这导致<class 'KeyError'>: 'job'
更近一点,但它开始感觉越来越黑。
我也希望包含一个Stack Trace但是那里的运气更少 - 我可以得到__traceback__
但当然它不可序列化并且在其上调用str()
只会导致对它的描述对象例如<traceback object at 0x0000000004024E48>
如何获得体面/全面的错误消息?
答案 0 :(得分:8)
您可能需要repr
:
Ret['Exception'] = repr(e)
对于追溯,请使用traceback module:
from traceback import format_exc
Ret['Traceback'] = format_exc()