Python获取当前运行函数名称与位置信息的实现方法
本文介绍在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
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









