Python获取当前运行函数名称与位置信息的实现方法

Leo
Leo
发布时间:2026-10-13 | 2人浏览过
原创

本文介绍在Python中获取当前运行函数名称及位置信息的方法。通过利用sys模块捕获异常并解析traceback对象,可以获取调用函数的名称、文件名及行号。该方法适用于调试场景,但需注意可能带来的性能损耗。

Python获取当前运行函数名称与位置信息的实现方法

在C/C++语言中,获取源码文件名、函数名和行号非常便捷,分别使用__FILE__、__FUNCTION__和__LINE__宏即可。Python虽然缺乏类似的直接语法,但可以通过特定手段实现相同功能。本文提供具体示例,利用异常信息来提取这些数据,需要注意的是,这种方法可能会带来一定的性能开销。

以下直接展示相关代码实现,具体细节可参考《Python核心编程》第4.4节的内容。

获取调用该函数所在(被调用)的函数名

#author:peterguo@vip.qq.com 
def get_func_name():
  import sys
  try:
    raise Exception
  except:
    exc_info = sys.exc_info()                             #返回 异常类型,异常,traceback对象
    traceObj = exc_info[2]                               #traceback对象
    frameObj = traceObj.tb_frame                         #获取frame对象,即本函数的frame信息
    #print frameObj.f_code.co_name,frameObj.f_lineno         #请在使用的时候将其注释
    Upframe = frameObj.f_back                           #获取该代码段的frame信息,即调用该函数的函数frame
    #print Upframe.f_code.co_name, Upframe.f_lineno          #请在使用的时候将其注释
    return (Upframe.f_code.co_name, Upframe.f_lineno)[0]      #获取名称
调用方法

获取文件名路径,函数名,行号

------------------------------------------------------------------------------

def getCurRunPosInfo():
  import sys
  try:
    raise Exception
  except:
    exc_info = sys.exc_info()    
    traceObj = exc_info[2]   
    frameObj = traceObj.tb_frame 
    #print frameObj.f_code.co_name,frameObj.f_lineno
    Upframe = frameObj.f_back            
    #print Upframe.f_code.co_name, Upframe.f_lineno 
    return (Upframe.f_code.co_filename, Upframe.f_code.co_name, Upframe.f_lineno)
#测试代码
def test1():
  print getCurRunPosInfo()

def test2():
  print get_func_name()
  
输出:
>>('demo.py', 'test1', 44)
>>test2

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表