python sys模块的exc_info()函数

"""
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:
        print(sys.exc_info())
        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("继续执行")

输出结果:

(<class 'ZeroDivisionError'>, ZeroDivisionError('division by zero'), <traceback object at 0x000002EFC4CACF48>)
<class 'ZeroDivisionError'> division by zero
第1层堆栈信息
文件名:D:/Shiyanlou_test/ggggg.py
函数或者模块名:<module>
第2层堆栈信息
文件名:D:/Shiyanlou_test/ggggg.py
函数或者模块名:p
第3层堆栈信息
文件名:D:/Shiyanlou_test/ggggg.py
函数或者模块名:n
第4层堆栈信息
文件名:D:/Shiyanlou_test/ggggg.py
函数或者模块名:m
继续执行

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值