【问题标题】:Get the full exception type/message and stack trace获取完整的异常类型/消息和堆栈跟踪
【发布时间】: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)

这导致&lt;class 'KeyError'&gt;: 'job' 更接近一点,但它开始感觉越来越黑客。

我还想包含一个堆栈跟踪,但那里的运气更差 - 我可以得到 __traceback__ 但当然它不是可序列化的,并且在它上面调用 str() 只会导致对象的描述,例如 @987654332 @

我怎样才能得到一个体面/全面的错误信息?

【问题讨论】:

    标签: python exception python-3.x


    【解决方案1】:

    你可能想要repr:

    Ret['Exception'] = repr(e)
    

    对于回溯,使用traceback module:

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

    【讨论】:

    • 他们都打印同样的东西
    • 这就是我所需要的——特别是回溯模块。非常感谢
    猜你喜欢
    • 1970-01-01
    • 2021-10-08
    • 2011-08-30
    • 1970-01-01
    • 2015-10-03
    • 1970-01-01
    • 1970-01-01
    • 2018-09-06
    • 2014-01-12
    相关资源
    最近更新 更多