2012-11-01 18 views
7

मैं Cython साथ एक समस्या है 0.17.1प्रचार सी ++ अपवाद cython के लिए - अजगर अपवाद

मेरे समारोह एक std::runtime_error फेंकता है तो एक फ़ाइल मौजूद नहीं है, मैं करने के लिए कुछ तरीके से इस अपवाद का प्रचार करना चाहते हैं मेरे साइथन कोड।

void loadFile(const string &filename) 
{ 
    // some code, if filename doesn't exists 
    throw std::runtime_error(std::string("File doesn't exists")); 
} 

और समारोह के सही रैपिंग के बाद Cython से:

try: 
    loadFile(myfilename) 
except RuntimeError: 
    print "Can't load file" 

लेकिन यह अपवाद हमेशा नजरअंदाज कर दिया है, मैं C++ अजगर से अपवाद कैसे पकड़ कर सकते हैं?

+0

आप को छोड़कर का उपयोग करते थे [ '': http://docs.cython.org/src/userguide/wrapping_CPlusPlus.html#exceptions

मूल रूप से, आप निम्नलिखित की तरह कुछ करने की ज़रूरत है ] (http://docs.cython.org/src/userguide/wrapping_CPlusPlus.html#exceptions) आपके 'cdef' में)? – user4815162342

+0

हाँ, शायद मुझे कुछ और कोड पोस्ट करना चाहिए ... – linello

+0

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

उत्तर

2

क्या आप बाहरी के साथ अपवाद हैंडलिंग घोषित कर रहे हैं? आप के बारे में सी ++ अपवाद हैंडलिंग पढ़ना चाहिए: + except + के रूप में अपने समारोह घोषित

cdef extern from "some_file.h": 
    cdef int foo() except + 
+0

हां मेरे फ़ंक्शन में "को छोड़कर +" घोषित किया गया है लेकिन मैं अभी भी अपवाद का पता लगाने में असमर्थ हूं। – linello

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