"""
1.sys.exc_info()可返回一个元组对象,分别为例外的类型、例外类的实例、traceback对象,比如下面的例子返回
(<class 'ZeroDivisionError'>, ZeroDivisionError('division by zero',), <traceback object at 0x0000000002EDD048>)
2.traceback对象代表了调用堆栈中每一层次的追踪,可使用tb_next获取更深层次的调用堆栈
3.tb_frame代表了该层追踪的所有对象信息
4.f_code可以获取该层的程序信息,co_filename则表示该程序所在的文件,co_name可获取函数或者模块的名称
"""
import time,sys
def m():
return 1 / 0
def n():
m()
def p():
n()
if __name__ == '__main__':
try:
p()
except:
ttype,tvalue,ttraceback = sys.exc_info()
print(ttype,tvalue,end="\n")
i = 1
while ttraceback:
print("第{}层堆栈信息".format(i))
tracebackCode = ttraceback.tb_frame.f_code
print("文件名:{}".format(tracebackCode.co_filename))
print("函数或者模块名:{}".format(tracebackCode.co_name))
ttraceback = ttraceback.tb_next
i += 1
time.sleep(1)
print("继续执行")