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

0 投票
1 回答
682 浏览
提问于 2025-04-15 23:00

我们在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++层,再送到异常工厂去处理。

撰写回答