Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Python创建基本PyTupleObject';SCAPI_Python_C++_Python C Api - Fatal编程技术网

使用Python创建基本PyTupleObject';SCAPI

使用Python创建基本PyTupleObject';SCAPI,python,c++,python-c-api,Python,C++,Python C Api,我很难使用Python C api创建PyTupleObject #include "Python.h" int main() { int err; Py_ssize_t size = 2; PyObject *the_tuple = PyTuple_New(size); // this line crashes the program if (!the_tuple) std::cerr << "the

我很难使用Python C api创建PyTupleObject

#include "Python.h"

int main() {
    int err;
    Py_ssize_t size = 2;
    PyObject *the_tuple = PyTuple_New(size); // this line crashes the program
    if (!the_tuple)
        std::cerr << "the tuple is null" << std::endl;
    err = PyTuple_SetItem(the_tuple, (Py_ssize_t) 0, PyLong_FromLong((long) 5.7));
    if (err < 0) {
        std::cerr << "first set item failed" << std::endl;
    }
    err = PyTuple_SetItem(the_tuple, (Py_ssize_t) 1, PyLong_FromLong((long) 5.7));
    if (err < 0) {
        std::cerr << "second set item failed" << std::endl;
    }
    return 0;

}


但到目前为止我试过的其他方法也是如此。知道我做错了什么吗?不是我只是试图运行一个C++程序,因为我只是在添加一个SWIG类型映射之前尝试对代码进行测试。

< P> @ Acsits是正确的,因为如果想与Python对象进行交互(实际上,你是嵌入Python),则需要初始化解释器。API中有一个不需要初始化解释器就可以安全调用的方法,但是创建Python对象不属于这个子集

Py_BuildValue可能“起作用”(如中所示,不使用这些特定参数创建segfault),但如果在未初始化解释器的情况下尝试使用它,则会在代码的其他地方引起问题


看起来您试图扩展Python,而不是嵌入它,但是您嵌入它是为了测试扩展代码。您可能需要参考以指导您完成此过程。

我对Python的C API一无所知,但我假设您必须以某种方式初始化运行时,快速搜索显示
Py\u initialize
:是的,我看到了。然而,我认为这只有在实际嵌入Python时才有必要。我只是尝试得到C++中创建的元组,因为我会立即把它传递给SWIG,这会起到很大的提升作用。另外,使用函数PyObject*obj=Py_BuildValue(“i”,1,2)从main开始工作,没有调用Py_Initialize-只有当我尝试创建一个元组时,我才会得到一个segfault。API必须提供某种垃圾收集或引用计数机制,因为可以将这些对象传递给python,这当然需要一些初始化。
Process finished with exit code -1073741819 (0xC0000005)