traceback.format_exception_only
有参数 (etype, value)
。如果我有一个要格式化的异常 e
,在什么情况下我不想调用 format_exception_only(type(e), e)
?
sys.exc_info
返回类型、值和回溯。上下文管理器的 __exit__
方法具有与参数相同的三样东西。类型不是多余的吗?它可以等于 type(value)
以外的东西吗?
最佳答案
历史原因。
回到 1.x 时代,这些信息并没有全部捆绑在一个对象中。异常类型是 string(!) 而不是类,值是某个任意对象,并且回溯未附加到这些对象中的任何一个。所有 type、value、traceback
API 都是围绕此设计构建的,其中这些对象必须单独传递:
MyException = "MyException"
raise MyException, 3
有时在 1.x 行(I think 1.2)中,他们添加了基于类的异常,有时在 2.x 行中(我认为是 2.6,因为 2.5 branch 代码路径似乎只引发警告),字符串异常被删除,但旧的函数签名仍然存在。
关于python - 为什么 Python 经常将异常类型和值(exc_info、__exit__ 等)分开?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44032313/