Historia: Próbuję interfejs z C do Pythona, aby użyć szybszej prędkości obliczeniowej C dla istniejącego kodu Pythona. Osiągnąłem już pewien sukces, także z przekazywaniem tablic NumPy - ale teraz wydaje się, że jest problem i nie mogę go rozwiązać. Jest to kod:Python - SystemError: NULL wynik bez błędu w wywołaniu PyObject
#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;
}
to naprawdę nie robi nic by teraz, po prostu chciałem sprawdzić, czy jestem w stanie przekazać te arrays.As tytuł mówi, ja otrzymuję następujący komunikat o błędzie:
SystemError: NULL result without error in PyObject call
Jest to interesujące, ponieważ już zdałem kilka tablic jeden raz (zrobiłem to w ten sam sposób ..) i zwykle te tablice są może 100x100, nawet jeśli. Zazwyczaj ludzie narzekali na bardzo dużych tablic ..
Używam Ubuntu 14.04 na komputerze 64-bitowym, Python V2.7.6 i NumPy 1.8.2
Byłoby świetnie, gdyby ktoś z was może mi pomóc - ja nie mam pojęcia, co poszło nie tak ..
EDYCJA: Jeszcze nie wymyśliłem problemu, ale czasami działa, czasami zawiesza się z powodu błędu z góry .. Nie mam absolutnie pojęcia, co to może być - kogokolwiek?
Gdzie zdefiniowano 'result'? – alk
Również 'format_buffer' jest niezdefiniowany. I wiem, że zdefiniowanie 'FORMAT_VALUE_T' również byłoby miłe. – alk
Przepraszam, musiałem przypadkowo usunąć niektóre rzeczy. Teraz powinno być ok. – rammelmueller