SWIG:抛出从Python到C ++的异常

时间:2010-05-21 19:01:01

标签: c++ python exception-handling swig

我们已经在C ++中定义了一个接口(抽象类,所有函数都是纯虚拟的),它将在Python中进行扩展。为了克服跨语言多态性问题,我们计划使用SWIG directors。我已经阅读了如何在我们的Python代码hereherehere甚至SO中捕获从C ++代码抛出的异常。

这是相当直接的,我不期望处理我们的库自己的例外的问题。我想知道并且在文档中似乎找不到的是如何使我们的扩展C ++接口的Python实现以一种使C ++代码可见的方式抛出这些C ++异常。

我们可以在* .i文件中创建小函数,以便每个函数抛出异常:

void throw_myException(){ throw MyException; }

但我想知道它将如何与Python代码交互。

任何人都有从Python代码中抛出C ++异常的经验吗?

1 个答案:

答案 0 :(得分:2)

(C)Python是用C语言编写的。似乎通过解释器抛出异常可能是不好的。

我的感觉是,从API返回某种类型的令牌可能是最安全的,可以通过工厂创建异常。

这基本上就是我们在这里所做的,虽然我们使用C#代替Python来生成“错误代码”数据,然后将其转换为C ++层,然后发送到异常工厂。