当我捕获异常时,如何获取前一帧的类型,文件和行号?

Cla*_*diu 7 python error-handling exception-handling exception

这个问题来看,我现在正在进行一级错误处理.也就是说,我调用一个调用另一个更大函数的函数,我希望它在更大的函数中失败,而不是在较小的函数中.具体的例子.代码是:

import sys, os

def workerFunc():
    return 4/0

def runTest():
    try:
        print workerFunc()
    except:
        ty,val,tb = sys.exc_info()
        print "Error: %s,%s,%s" % (
            ty.__name__,
            os.path.split(tb.tb_frame.f_code.co_filename)[1],
            tb.tb_lineno)

runTest()
Run Code Online (Sandbox Code Playgroud)

输出是:

Error: ZeroDivisionError,tmp2.py,8
Run Code Online (Sandbox Code Playgroud)

但第8行是"print workerFunc()" - 我知道该行失败了,但我想要之前的行:

Error: ZeroDivisionError,tmp2.py,4
Run Code Online (Sandbox Code Playgroud)

Ale*_*lli 4

添加一行:

    tb = tb.tb_next
Run Code Online (Sandbox Code Playgroud)

就在您致电 后sys.exc_info

请参阅“Traceback 对象”下的文档。