我们已经在C ++中定义了一个接口(抽象类,所有函数都是纯虚拟的),它将在Python中进行扩展。为了克服跨语言多态性问题,我们计划使用SWIG directors。我已经阅读了如何在我们的Python代码here,here,here甚至SO中捕获从C ++代码抛出的异常。
这是相当直接的,我不期望处理我们的库自己的例外的问题。我想知道并且在文档中似乎找不到的是如何使我们的扩展C ++接口的Python实现以一种使C ++代码可见的方式抛出这些C ++异常。
我们可以在* .i文件中创建小函数,以便每个函数抛出异常:
void throw_myException(){ throw MyException; }
但我想知道它将如何与Python代码交互。
任何人都有从Python代码中抛出C ++异常的经验吗?
答案 0 :(得分:2)
(C)Python是用C语言编写的。似乎通过解释器抛出异常可能是不好的。
我的感觉是,从API返回某种类型的令牌可能是最安全的,可以通过工厂创建异常。
这基本上就是我们在这里所做的,虽然我们使用C#代替Python来生成“错误代码”数据,然后将其转换为C ++层,然后发送到异常工厂。