代码之家  ›  专栏  ›  技术社区  ›  Heartagramir

exc_traceback为什么返回None

  •  1
  • Heartagramir  · 技术社区  · 8 年前

    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

    1 回复  |  直到 8 年前
        1
  •  2
  •   jonrsharpe    8 年前

    你看 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>
    

    呼叫者.py ),你看不到 .