And*_*Sun 7 python cpython exception
我想了解以下之间的区别:
try:
raise Exception("wat")
except Exception:
extype, exc, tb = sys.exc_info()
traceback.print_exception(extype, exc, tb)
Run Code Online (Sandbox Code Playgroud)
和:
try:
raise Exception("wat")
except Exception as exc:
extype = type(exc)
tb = exc.__traceback__
traceback.print_exception(extype, exc, tb)
Run Code Online (Sandbox Code Playgroud)
是否存在type(exc)和exc.__traceback__与 返回的值不同的情况sys.exc_info()?如果不是,我什么时候应该选择其中一种而不是另一种?当我对此进行测试时(Python 3.7),返回的对象在引用上是相同的。
查看 CPython 中的实现exc_info(),第一个返回值(异常类型)似乎是通过调用PyExceptionInstance_Class获得的,这与type(exc). 但是,我无法找到如何设置回溯。
(FWIW我知道速记traceback.print_exc(),这与这个问题无关)
该__traceback__属性仅从 Python 3.0 起可用,因此如果您希望使代码与 Python 2 兼容,则应该使用sys.exc_info();否则,根据PEP-3134,该__traceback__属性的引入确实意味着完全替换sys.exc_info(),并可能弃用它:
在今天的 Python 实现中,异常由三部分组成:类型、值和回溯。该模块在三个并行变量、 、 和
sys中公开当前异常,该函数返回这三个部分的元组,并且 raise 语句具有接受这三个部分的三参数形式。操作异常通常需要并行传递这三件事,这可能很乏味且容易出错。此外, except 语句只能提供对值的访问,而不能提供回溯。将属性添加到异常值使得可以从一个位置访问所有异常信息。exc_typeexc_valueexc_tracebacksys.exc_info()__traceback__
| 归档时间: |
|
| 查看次数: |
4430 次 |
| 最近记录: |