在Python中,如何获取当前帧?

38 投票
3 回答
27121 浏览
提问于 2025-04-15 12:57

在其他编程语言中,我可以通过一种叫做反射的技术来获取当前的执行环境,这样我就能知道在我现在这个范围内有哪些变量是局部的。

那么在Python中,有没有办法做到这一点呢?

3 个回答

26

我用这些小东西来调试和记录日志:

import os
import sys

def LINE( back = 0 ):
    return sys._getframe( back + 1 ).f_lineno
def FILE( back = 0 ):
   return sys._getframe( back + 1 ).f_code.co_filename
def FUNC( back = 0):
    return sys._getframe( back + 1 ).f_code.co_name
def WHERE( back = 0 ):
   frame = sys._getframe( back + 1 )
   return "%s/%s %s()" % ( os.path.basename( frame.f_code.co_filename ), 
                           frame.f_lineno, frame.f_code.co_name )
43

最好的办法是使用inspect模块,而不是使用sys中的私有函数。

import inspect

current_frame = inspect.currentframe()
46
import sys    
sys._getframe(number)

当前帧的数字是0,上一帧的数字是1,依此类推。

我找到的关于Python中帧的最佳入门介绍在这里

不过,你可以看看inspect模块,因为它可以处理大多数你想用帧做的常见操作。

撰写回答