使用Python C-API获取值堆栈的当前大小

问题描述 投票:1回答:1

我正在使用Python的C-API。具体来说,我想看看是否可以检查值堆栈当前有多少个元素。这是我的代码:

#include <Python.h>
#include <frameobject.h>

int test() {
    PyFrameObject* f = PyEval_GetFrame();
    return (int)(f->f_stacktop - f->f_valuestack);
}

我不确定这是否可以工作,但是Python's source code中存在此行,因此我尝试了一下。

这通常导致负数,类似于-547715639

很明显,我做错了,可能是因为文档"Frame evaluation usually NULLs it (f_stacktop)"中所述。什么是正确的方法,甚至有可能?

python c python-c-api
1个回答
0
投票

不可能。参见this answer

总之,我应该使用

(int)(stack_pointer - f->f_valuestack);

但是,stack_pointer_PyEval_EvalFrameDefault函数内部的局部变量,因此无法从外部访问。

© www.soinside.com 2019 - 2024. All rights reserved.