linello
linello

Reputation: 8704

Propagating c++ exception to cython - python exception

I have a problem with Cython 0.17.1

My function throws a std::runtime_error if a file doesn't exist, I'd like to propagate this exception in some manner to my Cython code.

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

and from Cython after the right wrapping of the function:

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

but this exception is always ignored, how can I catch c++ exceptions from Python?

Upvotes: 14

Views: 3602

Answers (2)

robertwb
robertwb

Reputation: 5104

Declare your function as except +, see http://docs.cython.org/src/userguide/wrapping_CPlusPlus.html#exceptions

Upvotes: 1

kitti
kitti

Reputation: 14824

Are you declaring the exception handling with the extern? You should read about C++ exception handling: http://docs.cython.org/src/userguide/wrapping_CPlusPlus.html#exceptions

Basically, you need to do something like the following:

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

Upvotes: 8

Related Questions