SWIG:从C ++代码报告Python异常

时间:2011-01-26 23:47:28

标签: c++ python exception swig

我正在使用一个库,它在其API文档中指定了一个从库的某个特定类继承的类。库本身是用C ++编写的,使用SWIG生成Python的绑定。问题是,当我运行我的Python代码时,无论Python抛出什么异常,我都会收到错误说“在抛出'Swig :: DirectorMethodException'的实例后调用终止”。

我希望在执行程序时报告Python代码引发的异常。 Esp,那些我得到ZeroDivisionError的情况。

我试图通过遵循http://www.swig.org/Doc2.0/Python.html#Python_nn36的SWIG文档中描述的方法来破解,但没有运气。无论我在module.i文件中放入什么内容,我仍然会收到相同的消息“在抛出'Swig :: DirectorMethodException'实例后终止调用”。

有人可以指点一下如何处理这个问题,以便报告Python异常吗?

2 个答案:

答案 0 :(得分:2)

在程序控制台中报告Python引发的异常。

这是来自Madhusudan.C.S的有用修复。 看看他对ginbot答案的评论。 我把它作为一个答案,以便它变得更加明显。

/* MyInterface.i */
%module(directors="1") MyInterface
%feature("director:except") {
    if( $error != NULL ) {
        PyObject *ptype, *pvalue, *ptraceback;
        PyErr_Fetch( &ptype, &pvalue, &ptraceback );
        PyErr_Restore( ptype, pvalue, ptraceback );
        PyErr_Print();
        Py_Exit(1);
    }
} 

答案 1 :(得分:1)

我不知道你的代码库有多远,所以这可能没用,但我的运气好于 boost :: python 而不是 SWIG 。然后你可以这样做:boost::python Export Custom Exception