【问题标题】:Why are python generator frames' (gi_frame) f_back attribute always none?为什么 python 生成器框架的 (gi_frame) f_back 属性总是没有?
【发布时间】:2017-05-05 12:00:28
【问题描述】:

标题是不言自明的。我正在做类似的事情:

gen = obj #some generator instance running
frame = obj.gi_frame
prevframe = frame.f_back

但我总是得到None 换成prevframe。为什么会这样。另外,是否有一些解决方法?

上下文:我正在尝试编写一个简单的调用堆栈方法来确定调用特定函数的内容。我正在使用扭曲的沙井并远程登录到一个正在运行的进程中,然后我在其中执行这些命令,但我似乎无法访问之前的帧。

【问题讨论】:

  • 不,那很好,谢谢

标签: python generator python-2.6 callstack


【解决方案1】:

据我所知,这是故意的,无法解决。 cpython 中负责它的代码是here,这表明一旦生成器产生(或除外),对前一帧的引用就会被破坏,以防止引用计数出现问题。似乎预期的行为是生成器的前一帧在每次进入时都会被换出,所以当它没有运行时,“父帧”的概念没有多大意义。

至少在事后分析的情况下,正确的方法是使用回溯对象,它们的帧列表以相反的顺序链接,tb_next 而不是 f_back。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-27
    • 1970-01-01
    • 2014-12-02
    • 2017-01-27
    • 1970-01-01
    • 2017-07-05
    • 2013-09-08
    • 2013-01-09
    相关资源
    最近更新 更多