python 獲取調用棧和行號


# coding=utf-8
import sys


# noinspection PyProtectedMember,PyBroadException,SpellCheckingInspection
def f3():
    DEBUG_TRACE_LEVEL = 0

    # sys._getframe(0) 和 sys._getframe() 結果一樣
    #
    # sys._getframe(0) 代表當前文件名,函數名,行號
    # sys._getframe(1) 代表上一層調用的文件名,函數名,行號,以此類推
    print(sys._getframe(DEBUG_TRACE_LEVEL).f_code.co_filename)
    print(sys._getframe(DEBUG_TRACE_LEVEL).f_code.co_name)
    print(sys._getframe(DEBUG_TRACE_LEVEL).f_lineno)

    try:
        raise Exception
    except Exception:
        # 也可以通過異常獲取棧信息
        # tb_frame 代表當前棧信息,tb_frame.f_back 代表上一層調用棧信息,tb_frame.f_back.f_back 代表上上層調用,以此類推
        trace = sys.exc_info()[2].tb_frame
        for _ in range(DEBUG_TRACE_LEVEL):
            trace = trace.f_back

        print(trace.f_code.co_filename)
        print(trace.f_code.co_name)
        print(trace.f_lineno)


def f2():
    f3()


def f1():
    f2()


f1()





免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM