繁体   English   中英

Python-SystemError:NULL结果,PyObject调用中没有错误

[英]Python - SystemError: NULL result without error in PyObject call

故事:为了将C的更快计算速度用于现有Python代码,我正在尝试从C到Python进行接口。 通过传递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:NULL结果,PyObject调用中没有错误

这很有趣,因为我已经传递了一些数组一次(以相同的方式进行..),通常这些数组甚至可能是100x100。 通常人们抱怨非常大的阵列。

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

如果你们中的一个可以帮助我,那将是非常棒的-我不知道这里出了什么问题。

编辑:我还没有弄清楚这个问题,但有时它可以正常工作,有时它会由于上面的错误而崩溃。.我绝对不知道这可能是什么-有人吗?

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

当您从暴露给python的ac函数返回NULL时,必须先设置错误消息,因为返回NULL表示发生了错误。

如果发生错误,并且您因此而返回NULL,则使用PyErr_SetString();如果未发生错误,则使用

 Py_RETURN_NONE; 

谢谢iharob,帮了很多忙!

L.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM