我正在使用SWIG将C ++库包装到Java和Python中。 Java端工作正常,但是我遇到了将代码包装到Python中的问题,特别是当抛出IO异常时,我在python中得到以下内容:
...
RuntimeError: _408aad4bde7f0000_p_std__ios_base__failure
swig/python detected a memory leak of type 'std::ios_base::failure *', no destructor found.
以下是我的.i文件中的相关位置:
%include "exception.i"
#include <stdexcept>
#include <ios>
#include <iostream>
%exception {
try {
$action
} catch (const std::exception &e) {
PyErr_SetString(PyExc_Exception, const_cast<char*>(e.what()));
}
catch(std::ios_base::failure &e) {
PyErr_SetString(PyExc_IOError, const_cast<char*>(e.what()));
}
}
有什么想法吗?对于它的价值,io异常在使用库的本机C ++和SWIG包装的Java中都按预期工作。
答案 0 :(得分:0)
答案可能太晚了,但是你应该把这样的例外包裹起来
// http://www.swig.org/Doc1.3/Library.html#Library_stl_exceptions
%exception {
try {
$action
} catch (const std::exception& e) {
SWIG_exception(SWIG_RuntimeError, e.what());
}
}
它也可以跨语言移植,并且您不需要为Java和Python单独进行异常处理。