c++ - SWIG:将异常从 Python 抛出到 C++

标签 c++ python exception swig

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

它相当简单明了,我预计在处理我们图书馆自身的异常时不会出现问题。我想知道但似乎无法在文档中找到的是如何让我们的扩展 C++ 接口(interface)的 Python 实现以一种使它们对 C++ 代码可见的方式抛出这些 C++ 异常。

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

void throw_myException(){ throw MyException; }

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

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

最佳答案

(C)Python 是用 C 语言编写的。似乎“通过”解释器抛出异常可能很糟糕。

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

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

关于c++ - SWIG:将异常从 Python 抛出到 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2884797/

相关文章:

delphi - 在另一个线程中引发异常

c# - Windows Mobile 上的 vector 图形

c++ - 使用简单\非侵入式数据模型的 C++ 中的 XML 数据绑定(bind)

c++ - "cout <<(_1*3)"是什么意思?

java - javax.servlet.error.exception 属性是否总是转换为 java.lang.Exception 类型?

visual-studio - 在 Visual Studio 2019 中引发用户处理的异常时如何不中断

c++ - 编译时指向函数错误的指针

python - 获取切片后 Django 无法更新查询

python - pandas 数据透视表 : calculate weighted averages through aggfunc

python - 访问同一字典中的字典键值