Bas*_*sic 6 python exception python-3.x
我编写了一个以下列格式返回Json的API ...
{"Success": true, Result: {...}}
{"Success": false, ExceptionId: "(some uuid)"}
Run Code Online (Sandbox Code Playgroud)
记录例外.这原则很好,允许某人在没有告诉他们它是什么的情况下讨论错误(作为安全措施).在调试期间,我还想输出错误消息,以阻止我不得不一直引用数据库.
事实上,问题是从异常中获取有用信息(返回或登录数据库)
我正在做这样的事......
try:
Ret['Result'] = <Blah>
Ret['Success'] = True
except Exception as e:
# ... Logging/ExceptionId
if Settings.DebugMode:
Ret['Exception'] = str(e)
Run Code Online (Sandbox Code Playgroud)
如果我在最后一行放置一个断点并e
在eclipse的监视窗口中检查,我得到了KeyError: 'Something'
,但str(e)
结果'Something'
是非常无益的.
我用谷歌搜索,我找不到任何方法从异常中获取正确的消息.显然曾经有.message
过v <2.4但在3.3中对我毫无帮助
作为替代方案,我尝试过:
Ret['Exception'] = str(type(e)) + ": " + str(e)
Run Code Online (Sandbox Code Playgroud)
这导致<class 'KeyError'>: 'job'
了更近一点,但它开始感觉越来越hackish.
我也希望包含一个堆栈跟踪但在那里运气更少 - 我可以得到__traceback__
但当然它不可序列化并且调用str()
它只会导致对象的描述,例如<traceback object at 0x0000000004024E48>
如何获得体面/全面的错误消息?
你可能想要repr
:
Ret['Exception'] = repr(e)
Run Code Online (Sandbox Code Playgroud)
对于回溯,请使用traceback模块:
from traceback import format_exc
Ret['Traceback'] = format_exc()
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3135 次 |
最近记录: |