wxsheng 发表于 2015-4-28 08:32:00

Python显示函数调用堆栈

  网上找到如下几个思路:
  1、用inspect模块
  2、用sys._getframe模块
  3、用sys.exc_traceback,先抛一个异常,然后抓出traceback
  



#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
def test(depth = 0):
frame = sys._getframe(depth)
code = frame.f_code
print "frame depth = ", depth
print "func name = ", code.co_name
print "func filename = ", code.co_filename
print "func lineno = ", code.co_firstlineno
print "func locals = ", frame.f_locals
def main():
test(0)
print "--------"
test(1)
if __name__ == "__main__":
main()
  



import inspect
class A:
def a(self):
print("A.a()")
B().b()
class B:
def b(self):
print("B.b()")
stack = inspect.stack()
the_class = stack.f_locals["self"].__class__
the_method = stack.f_code.co_name
print("I was called by {}.{}()".format(str(the_class), the_method))
A().a()
  



def currentframe():
"""Return the frame object for the caller's stack frame."""
try:
raise Exception
except:
return sys.exc_traceback.tb_frame.f_back
  
  
  更多信息可参考:
  http://stackoverflow.com/questions/11799290/get-function-callers-information-in-python
  http://stackoverflow.com/questions/900392/getting-the-caller-function-name-inside-another-function-in-python
  http://stackoverflow.com/questions/17065086/how-to-get-the-caller-class-name-inside-a-function-of-another-class-in-python
页: [1]
查看完整版本: Python显示函数调用堆栈