2009-07-16 60 views
23

在其他語言中,我可以通過反射api來獲取當前幀,以確定哪些變量對於我當前所在的範圍是局部的。在Python中,我如何獲取當前幀?

有沒有一種方法可以在Python中執行此操作?

+6

「python inspect stack frame」的第一個Google結果返回所需的答案; http://docs.python.org/library/inspect.html – jrockway 2009-07-16 20:47:58

回答

33
import sys  
sys._getframe(number) 

當前幀數爲0,幀數爲1等等。

我在蟒蛇發現幀最好的介紹是here

然而,看看因爲它要與框架做最普通的事情檢查模塊。

-3

查看dir函數。

對不起 - 實際上與框架無關,但仍然有用!

20

我使用的調試和記錄這些小傢伙:

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) 
20

最好的答案是使用inspect模塊;而不是sys中的私人功能。

import inspect 

current_frame = inspect.currentframe() 
+2

謝謝。但需要注意的一點是:「CPython實現細節:該函數依賴於解釋器中的Python堆棧框架支持,並不保證在所有Python實現中都存在。如果在沒有Python堆棧框架支持的實現中運行這個函數返回None。「 – twasbrillig 2015-04-15 19:33:50