在Python中,如何获取当前帧?
在其他编程语言中,我可以通过一种叫做反射的技术来获取当前的执行环境,这样我就能知道在我现在这个范围内有哪些变量是局部的。
那么在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模块,因为它可以处理大多数你想用帧做的常见操作。