SWIG:从Python抛出异常到C++
我们在C++中定义了一个接口(抽象类,所有函数都是纯虚函数),然后打算在Python中扩展这个接口。为了克服跨语言多态性的问题,我们计划使用SWIG directors。我已经阅读了如何在我们的Python代码中捕获从C++代码抛出的异常,相关信息可以在这里、这里、这里,甚至在SO上找到。
这个过程相对简单,我不担心处理我们库中自己的异常。我想知道的是,如何让我们在Python中实现的C++接口扩展能够抛出C++异常,并且这些异常能被C++代码看到,这个在文档中找不到。
我们可以在*.i文件中创建小函数,让每个函数抛出我们的异常:
void throw_myException(){ throw MyException; }
但我在想这会如何与Python代码互动。
有没有人有过从Python代码抛出C++异常的经验?
1 个回答
2
(C)Python是用C语言写的。直接在解释器中抛出异常可能会有问题。
我觉得,从你的API返回某种标记,之后再通过一个工厂来创建异常,可能是最安全的做法。
我们这里基本上就是这么做的,不过我们用的是C#来生成“错误代码”数据,然后这些数据会被转到C++层,再送到异常工厂去处理。