2009-04-15 48 views
3

編輯:這個問題已經解決了從apphacker和ConcernedOfTunbridgeWells的幫助。我更新了代碼以反映我將要使用的解決方案。檢索/打印執行上下文

我目前正在編寫一個羣智能模擬器,並希望給用戶一個簡單的方法來調試他們的算法。在其他輸出中,我覺得在算法的每一步的開始給用戶輸出執行上下文將是有益的。

下面的代碼實現了我所需要的。

import inspect 

def print_current_execution_context(): 
    frame=inspect.currentframe().f_back #get caller frame 
    print frame.f_locals #print locals of caller 

class TheClass(object): 
    def __init__(self,val): 
     self.val=val 
    def thefunction(self,a,b): 
     c=a+b 
     print_current_execution_context() 


C=TheClass(2) 
C.thefunction(1,2) 

這使的預期輸出:

{'a': 1, 'c': 3, 'b': 2, 'self': <__main__.TheClass object at 0xb7d2214c>} 

謝謝apphacker,誰指着我對這個回答ConcernedOfTunbridgeWells

+0

由於正式支持標籤,因此不需要標記標題。由於標題中的[Python]可能會引起您的問題,因此它不會衡量您實際使用「python」作爲標記時獲得的大黃色背景。 – 2009-04-15 08:10:43

+0

不要編輯問題來說「解決」 - 接受解決它的答案。或張貼您自己的答案。 – 2009-04-15 10:07:56

+0

未來我會,但編輯乾脆取代#????有2條線實現了功能,所以它不是一個大的改變。 – 2009-04-15 12:20:00

回答

1

嘗試:

class TheClass(object): 
    def __init__(self,val): 
     self.val=val 
    def thefunction(self,a,b): 
     c=a+b 
     print locals() 


C=TheClass(2) 
C.thefunction(1,2)