2015-03-15 5 views
6

Die Geschichte: Ich versuche, von C zu Python zu verbinden, um die schnellere Rechengeschwindigkeit von C für einen vorhandenen Python-Code zu verwenden. Ich hatte bereits einige Erfolge, auch mit NumPy-Arrays - aber jetzt scheint es ein Problem zu geben und ich kann es nicht lösen. Dies ist der Code:Python - SystemError: NULL-Ergebnis ohne Fehler in PyObject-Aufruf

#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; 
    } 

Es ist wirklich nichts zu tun, jetzt, ich wollte nur überprüfen, ob ich in der Lage bin, diese arrays.As passiert der Titel schon sagt, ich die folgende Fehlermeldung erhalten:

Dies ist interessant, da ich bereits einige Arrays einmal passiert habe (tat es auf die gleiche Weise ..) und in der Regel diese Arrays sind vielleicht 100x100 wenn sogar. Normalerweise klagten die Menschen über sehr große Arrays ..

Ich bin mit Ubuntu 14.04 auf einem 64-Bit-Maschine, Python V2.7.6 und Numpy 1.8.2

Es wäre fantastisch, wenn einer von euch mir helfen könnte - I hab keine ahnung, was hier schief läuft ..

EDIT: Ich habe das Problem noch nicht herausgefunden, aber manchmal funktioniert es, manchmal stürzt es mit dem Fehler von oben ab. Ich habe absolut keine Ahnung, was das sein könnte - irgendjemand?

+2

Wo ist "Ergebnis" definiert? – alk

+0

Auch 'format_buffer' ist nicht definiert. Und wissen, wie 'FORMAT_VALUE_T' definiert ist, wäre auch nett. – alk

+0

Entschuldigung, muss versehentlich einige Sachen gelöscht haben. Es sollte jetzt in Ordnung sein. – rammelmueller

Antwort

1

Kürzlich zeigte mir jemand die Antwort in einem anderen Beitrag:

When you return NULL from a c function exposed to python you must set the error message before, since returning NULL means an error happened.

If an error happened and you are returning NULL because of that then, use PyErr_SetString(), if no error happened, then use

Py_RETURN_NONE; 

Dank iharob, sehr geholfen!

L.