में कस्टम सी ++ अपवादों को संभालना मुझे साइथन से कॉल करते समय कस्टम सी ++ अपवादों को संभालने में कुछ परेशानी है। मेरी स्थिति निम्न है: मेरे पास एक लाइब्रेरी है जो सभी अपवादों के लिए CustomLibraryException
का उपयोग करती है। जो मैं चाहता हूं वह मूल रूप से त्रुटि संदेश प्राप्त करता है और इसके साथ एक पायथन त्रुटि उठाता है।साइथन
user guide में कुछ संकेत हैं लेकिन यह थोड़ा सा विशिष्ट है। पहली संभावना करना है: यह एक ValueError
को CustomLibraryException
धर्मान्तरित
cdef पूर्णांक बार() + ValueError
छोड़कर, लेकिन त्रुटि संदेश खो देता है।
अन्य संभावना स्पष्ट रूप से उपयोग कर रहा
cdef int raise_py_error()
cdef int something_dangerous() except +raise_py_error
मैं वास्तव में इस समाधान understant नहीं है त्रुटि कन्वर्ट करने के लिए है। मुझे समझ में आया कि raise_py_error को एक सी ++ फ़ंक्शन होना चाहिए जो किसी भी तरह से त्रुटि को संभालता है। मुझे यकीन नहीं है कि इसे कैसे संभालना है। फ़ंक्शन को कोई तर्क नहीं मिलता है और C++ में catch
ब्लॉक के अंदर बुलाया जाता है।
यदि किसी के पास साइथन में सी ++ अपवाद को संभालने का एक कामकाजी उदाहरण है, तो यह बहुत मददगार होगा।
अपवाद को '' std :: runtime'' से प्राप्त नहीं किया गया है जैसा कि आप उम्मीद करते थे। मदद के लिए धन्यवाद :) हालांकि यह इतना बेहतर नहीं बनाता है, हालांकि। त्रुटि को बढ़ाने वाले फ़ंक्शन सदस्य-कार्य हैं और मैं उनका कोड बदलना नहीं चाहता हूं। यह मेरे [जीको रैपर] (http://peekaboo-vision.blogspot.de/2012/05/graphcuts-for-python-pygco.html) के बारे में है और लाइसेंस मुझे पुनर्वितरण की अनुमति नहीं देता है: -/ –
@ एंड्रियासमुएलर: सदस्य कार्यों को फ्रीस्टैंडिंग कार्यों में आसानी से लपेटा जा सकता है; बस उस ऑब्जेक्ट को पास करें जिसे उन्हें पहले तर्क के रूप में संचालित करना चाहिए: 'शून्य रैपर (ओब्जे और ओ, इंट हैम) {वापसी o.wrapped (हैम); } ' –
हाँ मुझे पता है, मैं अभी तक इसे करने के लिए आलसी था;) बीटीडब्ल्यू, क्या आप जानते थे कि आप एसओ पर शीर्ष 100 वें पोस्टर हैं? –