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[1][0].f_locals["self"].__class__ the_method = stack[1][0].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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?