2011-01-26 7 views
6

से पाइथन अपवादों की रिपोर्ट करना मैं पुस्तकालय का उपयोग कर रहा हूं, जो लाइब्रेरी के किसी विशेष वर्ग से विरासत में प्राप्त कक्षा को परिभाषित करने के लिए अपने एपीआई दस्तावेज़ों में निर्दिष्ट करता है। पुस्तकालय स्वयं सी ++ में लिखा गया है और पाइथन को बाइंडिंग एसडब्ल्यूआईजी का उपयोग करके उत्पन्न किया गया है। समस्या यह है कि, जब मैं अपना पायथन कोड चलाता हूं, इससे कोई फर्क नहीं पड़ता कि पाइथन फेंकने का अपवाद कितना भी है, मुझे यह कहते हुए त्रुटि मिलती है कि "स्विग :: डायरेक्टर मोडिशन अपवाद" का उदाहरण फेंकने के बाद बुलाया जाता है।एसडब्ल्यूआईजी: सी ++ कोड

मैं अपने प्रोग्राम को निष्पादित करते समय पाइथन कोड द्वारा उठाए गए अपवाद को देखना चाहता हूं। एएसपी, उन मामलों में जहां मुझे ZeroDivisionError मिलता है।

मैंने http://www.swig.org/Doc2.0/Python.html#Python_nn36 पर SWIG दस्तावेज़ में वर्णित विधि का पालन करके थोड़ा सा हैक करने की कोशिश की लेकिन बिना किसी किस्मत के। मुझे अभी भी वही संदेश मिलता है जिसे "Swig :: DirectorMethodException 'का उदाहरण फेंकने के बाद बुलाया जाता है" इससे कोई फर्क नहीं पड़ता कि मैंने मॉड्यूल.आई फ़ाइल में क्या रखा है।

क्या कोई मुझे इस समस्या के बारे में बताए जाने के बारे में पॉइंटर्स दे सकता है, ताकि पाइथन अपवादों की सूचना दी जा सके?

उत्तर

1

मैं कि अब तक कितने आप अपने कोड आधार के साथ कर रहे हैं पता नहीं है, इसलिए इस छोटे से काम का हो सकता है, लेकिन मैं बढ़ावा :: अजगरबड़ा घूँट से साथ बेहतर किस्मत थी। फिर आप यह कर सकते हैं: boost::python Export Custom Exception

+1

सहायता के लिए धन्यवाद। मैंने वास्तव में इस समस्या को ठीक किया है और फिक्स यहां है: https://github.com/madhusudancs/mesos/commit/93ed9f32d8752d687d6b6af6bcb6bfdf815f115d यह काफी सरल था, लेकिन निश्चित रूप से अच्छी तरह से प्रलेखित नहीं था। साथ ही, यह मेरी परियोजना नहीं है, इसलिए मैं डेवलपर्स को बूस्ट :: पायथन का उपयोग करने का सुझाव दे सकता हूं, लेकिन मैं इसे नहीं कर सकता हालांकि –

+0

मुझे लगता है कि एसडब्ल्यूआईजी अनिवार्य था; मैं उन लोगों को बढ़ावा विकल्प छोड़ना चाहता था जो इस तरह मेरे प्रश्न पर ठोकरें :)। और अब उनके पास SWIG भी है। – ginbot

2

प्रोग्राम के कंसोल में पायथन द्वारा उठाए गए अपवाद की रिपोर्ट करें।

यह मधुसूदन.सी.एस. से उपयोगी फिक्स है। जीनबॉट के उत्तर पर उनकी टिप्पणी देखें। मैं इसे एक उत्तर के रूप में डाल रहा हूं ताकि यह और अधिक दिखाई दे।

/* MyInterface.i */ 
%module(directors="1") MyInterface 
%feature("director:except") { 
    if($error != NULL) { 
     PyObject *ptype, *pvalue, *ptraceback; 
     PyErr_Fetch(&ptype, &pvalue, &ptraceback); 
     PyErr_Restore(ptype, pvalue, ptraceback); 
     PyErr_Print(); 
     Py_Exit(1); 
    } 
} 
संबंधित मुद्दे