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

fra*_*ans 5 python formatting exception python-3.x

我要生成从一个行字符串Exception,它告诉我什么,其中(并不需要一个完整的回溯).以下信息会很好:

  • 文件名/亚麻
  • 异常类型
  • 异常描述(你得到什么str(e))
  • 很高兴:函数/方法/类

目前我做以下事情:

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))
Run Code Online (Sandbox Code Playgroud)

这给了我:

foo.py:203: AttributeError in foo(): "'module' object has no attribute 'nonexisting'"
Run Code Online (Sandbox Code Playgroud)

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

print(e.format('%f: %l: %t %F: "%w"'))
Run Code Online (Sandbox Code Playgroud)

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

Dan*_*man 4

我认为traceback.format_exception_only正是你想要的。

try:
    os.nonexisting()
except Exception as e:
    print(traceback.format_exception_only(e.__class__, e))
Run Code Online (Sandbox Code Playgroud)