获取完整的异常类型/消息和堆栈跟踪

时间:2013-04-16 11:31:25

标签: python exception python-3.x

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

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

1 个答案:

答案 0 :(得分:8)

您可能需要repr

Ret['Exception'] = repr(e)

对于追溯,请使用traceback module

from traceback import format_exc
Ret['Traceback'] = format_exc()