2013-04-16 72 views
3

我写返回的Json在以下格式的API ...得到完整的异常类型/消息和堆栈跟踪

{"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'更接近一点,但它开始感觉越来越黑客。

我也想包括堆栈跟踪,但有甚至运气不太那里 - 我可以得到__traceback__但当然它只是导致物体如的描述不是序列化,并呼吁str()<traceback object at 0x0000000004024E48>

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

回答

6

你可能想repr

Ret['Exception'] = repr(e) 

对于追踪,使用traceback module

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

它们都打印相同的事情 – jamylak

+0

这就是我需要的东西 - 特别是追踪模块。非常感谢 – Basic