我有一段结构如下的python代码:
import A
import B
A.throw()
B.throw()
两者都是用 C++ 编写的模块A
。B
当我编译它们时,它们都链接到一个公共库exception.so
,其中包括一个异常和一个引发它的函数:
class MyException {};
void raise_exception() {
throw MyException();
}
和文件在 python 包装函数A.cxx
中B.cxx
包含以下行throw()
:
try {
raise_exception();
} catch (const MyException& ) {
std::cout << "caught" << std::endl;
}
一切都编译得很好,两者都A
可以B
自己正常工作。
当我加载两个模块时发生了奇怪的事情:该异常仅被A
ifimport A
首先捕获。同样,只有在首先加载B
时才能捕获异常。B
我需要两个模块同时工作,显然我希望在 C++ 例程中捕获 C++ 异常,这样它们就不会终止覆盖的 python 脚本。关于如何做到这一点的任何想法?
编辑:可能可以包含raise_exception()
在 python capsule中,但这似乎有点过分,因为它exception.so
从未作为 python 模块加载(但是,它确实使用了 libpython.so 中的一些代码)。鉴于许多 python 模块使用系统头文件,似乎包含一个用户构建的 C++ 库将是微不足道的。