2012-11-01 13 views
7

Ich habe ein Problem mit Cython 0.17.1Propagierung von C++ Ausnahme Cython - Python Ausnahme

Meine Funktion ein std::runtime_error wirft, wenn eine Datei nicht existiert, ich mag diese Ausnahme in irgendeiner Art und Weise zu verbreiten, um meinen Cython-Code.

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

und von Cython nach rechts Verpackung der Funktion:

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

aber diese Ausnahme immer ignoriert wird, wie kann ich fangen C++ Ausnahmen von Python?

+0

Haben Sie [ 'außer +' ] (http://docs.cython.org/src/userguide/wrapping_CPlusPlus.html#exceptions) in Ihrem 'cdef'? – user4815162342

+0

ja, wahrscheinlich sollte ich noch mehr Code schreiben ... – linello

+0

Sind Sie absolut sicher, dass die Ausnahme auf der C++ Seite geworfen wird? Sie könnten auch versuchen, 'except RuntimeError' durch' except Exception, e' und print 'e' zu ​​ersetzen, um zu sehen, ob möglicherweise eine andere Python-Ausnahme ausgelöst wird. – user4815162342

Antwort

2

Deklarieren Sie die Ausnahmebehandlung mit dem extern? Sie sollten etwa C++ Ausnahmebehandlung lesen: http://docs.cython.org/src/userguide/wrapping_CPlusPlus.html#exceptions

Grundsätzlich müssen Sie so etwas wie die folgenden Funktionen ausführen:

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

Ja, meine Funktion hat das "except +" deklariert, aber ich kann die Ausnahme immer noch nicht erkennen. – linello