8

我编写了一个 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>

如何获得体面/全面的错误消息?

4

1 回答 1

20

你可能想要repr

Ret['Exception'] = repr(e)

对于回溯,请使用回溯模块

from traceback import format_exc
Ret['Traceback'] = format_exc()
于 2013-04-16T11:38:43.697 回答