python - 为什么 exc_traceback 返回 None

标签 python exception sys traceback

sys.exc_info()返回一个元组(类型、值、回溯)。
所以 sys.exc_info()[2] 是我们的回溯对象。

为什么它不使用此代码捕获异常回溯:

import sys

try:
    1/0
except ZeroDivisionError:
    print sys.exc_info()[2].tb_frame.f_back

tb_frame 和 f_back 的用法已解释如下: Frame Objects

最佳答案

您会看到None,因为没有外框。您直接执行此操作,因此当前帧是最后一帧。为了演示这一点,我创建了一个 demo.py:

import sys

try:
    1/0
except ZeroDivisionError:
    print sys.exc_info()[2].tb_frame.f_back

这应该看起来很熟悉,并且是一个简单的caller.py:

import demo

现在看看区别:

$ python demo.py
None

$ python caller.py
<frame object at 0x10bc34c20>

在第二种情况下,有一个外框架(即 caller.py),您看不到 None

关于python - 为什么 exc_traceback 返回 None,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38222138/

相关文章:

python - Django Rest Framework 获取表单作为 json

Python:作业中的异常

java - 在Java中,如果捕获并重新抛出一般异常,外部方法是否仍然能够捕获特定异常?

vb.net - 第一次机会异常(exception)

python - 避免每次为 __init__.py 工作而导出 PYTHONPATH

python - Python 字典文字和字典(成对列表)是否保持其键顺序?

python - 使用正则表达式从 %%timeit 中提取测量值

python - 在 Python 中更改操作系统以进行单元测试

python - PyQt 应用程序成功关闭,但进程没有被终止?

python - Django - 在 'INSTALLED APPS' 中添加应用程序名称时出现值错误