从异常中获取漂亮字符串的正确方法

时间:2015-06-09 09:22:05

标签: python exception python-3.x formatting

我想从Exception生成单行字符串,告诉我发生什么 哪里(不需要完整的回溯) 。以下信息会很好:

  • filename / linenumber
  • 例外类型
  • 异常描述(来自str(e)的内容)
  • 很高兴:function / method / class

目前我执行以下操作:

import os
...
try:
    os.nonexisting()
except Exception as e:
    t = e.__traceback__
    tbf = e.__traceback__.tb_frame
    print('%s:%d: %s in %s(): "%s" ' %
        os.path.basename(tbf.f_code.co_filename),
        t.tb_lineno,
        e.__class__.__name__,
        tbf.f_code.co_name, e))

给了我:

foo.py:203: AttributeError in foo(): "'module' object has no attribute 'nonexisting'"

是否有更优雅的方式来打印此示例中给出的详细信息?我在考虑s.th.像

print(e.format('%f: %l: %t %F: "%w"'))

我希望避免导入额外的模块,除非有一个完全用于此目的。

1 个答案:

答案 0 :(得分:4)

我认为traceback.format_exception_only完全符合您的要求。

try:
    os.nonexisting()
except Exception as e:
    print(traceback.format_exception_only(e.__class__, e))