【问题标题】:Retrieving/Printing execution context检索/打印执行上下文
【发布时间】:2010-10-19 12:56:28
【问题描述】:

编辑:这个问题在 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 向我指出了这个答案

【问题讨论】:

  • 由于官方支持标签,因此无需为标题添加标签。标题中的 [Python] 可能会给您的问题带来很多关注,但它并不能衡量我在实际使用“python”作为标签时得到的大黄色背景。
  • 不要将问题编辑为“已解决”——接受解决问题的答案。或发布您自己的答案。
  • 将来我会,但是编辑只是替换了#????用2行实现了这个功能,所以变化不大。

标签: python


【解决方案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)

【讨论】:

  • 效果很好,谢谢。有没有办法将它嵌入到另一个函数中?由于在每次迭代结束时都会发生其他操作,因此将它们分组到一个函数中会很好。我意识到 locals() 可以传递给函数,但这不是最佳的。
  • 您可以使用范围更高的闭包和字典,在每次迭代期间使用来自对 locals 的调用中的值进行更新,但如果将 locals() 传递给函数不是最佳的,我怀疑关闭将是。
【解决方案2】:

您可以使用__locals__ 来获取本地执行上下文。请参阅this stackoverflow posting 了解一些可能也相关的讨论。

【讨论】:

  • 谢谢,链接的线程听起来与我希望完成的非常相似。我将调查从堆栈帧中抓取__locals__ 并编辑我的问题以报告调查结果。谢谢,迈克
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-05-18
  • 2012-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多