inspect.stack()获取调用栈的使用方法
用途
使用inspect.stack()方法可以获取当前代码和调用代码的信息
简单代码说明
import inspect
def get_current_function_name():
return inspect.stack()
class MyClass:
def function_one(self):
print ("%s.%s invoked"%(self.__class__.__name__, get_current_function_name()))
if __name__ == "__main__":
myclass = MyClass()
myclass.function_one()
打印结果如下:
[FrameInfo(frame=<frame at 0x000002161F29D958, file 'tbss.py', line 4, code get_current_function_name>, filename='tbss.py', lineno=4, function='get_current_function_name', code_context=[' return inspect.stack()\n'], index=0), FrameInfo(frame=<frame at 0x000002161EB9C3C8, file 'tbss.py', line 7, code function_one>, filename='tbss.py', lineno=7, function='function_one', code_context=[' print ("%s.%s invoked"%(self.__class__.__name__, get_current_function_name()))\n'], index=0), FrameInfo(frame=<frame at 0x000002161F191428, file 'tbss.py', line 13, code <module>>, filename='tbss.py', lineno=13, function='<module>', code_context=[' myclass.function_one()\n'], index=0)]
#-----------------*******************--------------------
首先我们可以看出这是一个列表list:
分为两部分内容:
第一部分是inspect函数本身的信息也就是get_current_function_name,第二部分就是调用inspect的信息也就是function_one
内容详解:
可以看出获取的内容是个元组,里面记录了函数或者调用函数的内存地址,文件名称,所在行数,函数名称和index信息
调用演示
import inspect
def get_current_function_name():
#获取调用函数后取调用函数的名称
return inspect.stack()[1][3]
class MyClass:
def function_one(self):
print ("%s.%s invoked"%(self.__class__.__name__, get_current_function_name()))
class MyBug:
def function_hhh(self):
print ("%s.%s invoked"%(self.__class__.__name__, get_current_function_name()))
if __name__ == "__main__":
myclass = MyClass()
myclass.function_one()
mybug=MyBug()
mybug.function_hhh()
打印结果如下:
MyClass.function_one invoked
MyBug.function_hhh invoked