2015-03-15 4 views
6

में त्रुटि के बिना पूर्ण परिणाम: मैं मौजूदा पायथन कोड के लिए सी की तेज़ कम्प्यूटेशनल गति का उपयोग करने के लिए सी से पायथन तक इंटरफ़ेस करने की कोशिश कर रहा हूं। मुझे पहले से ही कुछ सफलता मिली है, साथ ही NumPy arrays को पास करने के साथ - लेकिन अब एक मुद्दा प्रतीत होता है और मैं इसे हल नहीं कर सकता।पायथन - सिस्टम त्रुटि: 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; 
    } 

यह वास्तव में अब तक कुछ भी करने से नहीं कर रहा है, मैं सिर्फ अगर मैं उन arrays.As शीर्षक कहते हैं पारित करने में सक्षम हूँ, मैं निम्नलिखित त्रुटि संदेश मिल रहा जाँच करने के लिए चाहता था:: इस कोड है

SystemError: NULL result without error in PyObject call

यह दिलचस्प है, क्योंकि मैंने पहले से ही कुछ सरणी पास की हैं (यह वही तरीका है ..) और आमतौर पर ये सरणी शायद 100x100 हो सकती हैं। आम तौर पर लोगों को बहुत बड़ी सरणियों के बारे में शिकायत ..

मैं एक 64 बिट मशीन, अजगर V2.7.6 और Numpy पर Ubuntu 14.04 उपयोग कर रहा हूँ 1.8.2

यह भयानक अगर आप में से एक मेरी मदद कर सकता है हो सकता है - मैं पता नहीं है कि यहाँ क्या गलत हो गया है ..

संपादित करें: मुझे अभी तक समस्या का पता नहीं लगा, लेकिन कभी-कभी यह काम करता है, कभी-कभी यह ऊपर से त्रुटि के साथ दुर्घटनाग्रस्त हो जाता है .. मुझे बिल्कुल कोई संकेत नहीं है कि यह क्या हो सकता है - कोई?

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; 

धन्यवाद iharob, बहुत मदद की:

+2

'परिणाम' कहां परिभाषित किया गया है? – alk

+0

इसके अलावा 'format_buffer' अपरिभाषित है। और जानें कि कैसे 'FORMAT_VALUE_T' परिभाषित किया गया है भी अच्छा होगा। – alk

+0

क्षमा करें, गलती से कुछ सामान हटा दिया होगा। यह अभी ठीक होना चाहिए। – rammelmueller

उत्तर

1

हाल ही में किसी ने मुझे एक और पोस्ट में जवाब से पता चला है!

एल

संबंधित मुद्दे