13

我对 Cython 0.17.1 有疑问

std::runtime_error如果文件不存在,我的函数会抛出一个异常,我想以某种方式将此异常传播到我的 Cython 代码。

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"

但是这个异常总是被忽略,我怎样才能从 Python 中捕获 c++ 异常?

4

2 回答 2

6

您是否使用 extern 声明异常处理?您应该阅读有关 C++ 异常处理的信息:http: //docs.cython.org/src/userguide/wrapping_CPlusPlus.html#exceptions

基本上,您需要执行以下操作:

cdef extern from "some_file.h":
    cdef int foo() except +
于 2012-11-01T21:46:43.823 回答
1

将您的函数声明为except +,请参阅http://docs.cython.org/src/userguide/wrapping_CPlusPlus.html#exceptions

于 2012-11-01T21:47:01.553 回答