python - 为什么 Python 经常将异常类型和值(exc_info、__exit__ 等)分开?

标签 python exception traceback

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/

相关文章:

Python正则表达式捕获短语?

python - 使用 post 请求和 xsrf token 登录,但收到 419

java - 下载图像并将其保存到 SD 卡中

python - 没有模块名册

python - 列表对象时出现 Django python 错误

python - 为 Python 显示简单的 OpenStreetMap 瓦片

python - 范围(1 :len(df)) assigns NaN to last rows in dataframe

exception - HBasePeriodicMemstoreFlusher异常

java - 如何从java中的线程传播异常?

python - Manage.py runserver 没有回溯