Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.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-SystemError:PyObject调用中无错误的空结果_Python_C_Arrays_Numpy_Extending - Fatal编程技术网

Python-SystemError:PyObject调用中无错误的空结果

Python-SystemError:PyObject调用中无错误的空结果,python,c,arrays,numpy,extending,Python,C,Arrays,Numpy,Extending,故事:我正在尝试从C到Python的接口,以便在现有Python代码中使用C更快的计算速度。我已经取得了一些成功,也通过了NumPy阵列-但现在似乎有一个问题,我无法解决它。代码如下: #define FORMAT_VALUE_T "d" char format_buffer[32]; typedef struct { PyObject_HEAD PyArrayObject *invmat; unsigned order;

故事:我正在尝试从C到Python的接口,以便在现有Python代码中使用C更快的计算速度。我已经取得了一些成功,也通过了NumPy阵列-但现在似乎有一个问题,我无法解决它。代码如下:

#define FORMAT_VALUE_T  "d"
char format_buffer[32];

typedef struct
    {
        PyObject_HEAD
        PyArrayObject *invmat;
        unsigned order;
        value_t weight, *buffer;
    } Det;

    typedef double value_t;

    typedef struct
    {
        PyObject_HEAD
        Det *det;
        value_t *row, *covs, ratio, star;
    } DetAppendMove;

    static int append_init(DetAppendMove *self, PyObject *args, PyObject *kwds)
    {
        value_t star, *temp;
        PyArrayObject *row, *col;
        PyObject *result = Py_BuildValue("(i)",1);
        Det *dete;

        snprintf(format_buffer, sizeof(format_buffer), "%s%s", "O!O!O!", FORMAT_VALUE_T);
        if (PyArg_ParseTuple(args, format_buffer, &DetType, &dete, &PyArray_Type, &row, &PyArray_Type, &col, &star))
        {   
            self->det = dete;
            temp = (value_t*)self->det->buffer;
        }
        else
        {
            result = Py_BuildValue("(i)",-1);
        }
        return result;
    }
现在它还没有做任何事情,我只是想检查我是否能够通过这些数组。正如标题所说,我收到以下错误消息:

SystemError:PyObject调用中没有错误的空结果

这很有趣,因为我曾经传递过一些数组(以相同的方式传递过…),通常这些数组可能是100x100,如果是偶数的话。通常人们抱怨阵列非常大

我在64位机器上使用Ubuntu 14.04,Python V2.7.6和Numpy 1.8.2

如果你们中有人能帮我,那就太棒了——我不知道这里出了什么问题


编辑:我还没有弄清楚这个问题,但有时它会工作,有时会因为上面的错误而崩溃。。我完全不知道这可能是什么——有人吗?

最近有人在另一篇帖子中向我展示了答案:

当从暴露于python的c函数返回NULL时,必须设置 之前的错误消息,因为返回NULL表示错误 发生了

如果发生错误并且因此返回NULL, 使用PyErr_SetString(),如果没有发生错误,则使用

Py_RETURN_NONE;
谢谢iharob,帮了我很多忙


L.

哪里定义了
结果
也未定义
格式缓冲区
。知道如何定义
格式\u值\u T
也很好。对不起,一定是无意中删除了一些内容。现在应该没事了。