2

我有一段结构如下的python代码:

import A
import B

A.throw()
B.throw()

两者都是用 C++ 编写的模块AB当我编译它们时,它们都链接到一个公共库exception.so,其中包括一个异常和一个引发它的函数:

class MyException {};
void raise_exception() {
    throw MyException(); 
}

和文件在 python 包装函数A.cxxB.cxx包含以下行throw()

try {
    raise_exception(); 
} catch (const MyException& ) { 
    std::cout << "caught" << std::endl; 
}

一切都编译得很好,两者都A可以B自己正常工作。

当我加载两个模块时发生了奇怪的事情:该异常仅被Aifimport A首先捕获。同样,只有在首先加载B时才能捕获异常。B我需要两个模块同时工作,显然我希望在 C++ 例程中捕获 C++ 异常,这样它们就不会终止覆盖的 python 脚本。关于如何做到这一点的任何想法?

编辑:可能可以包含raise_exception()在 python capsule中,但这似乎有点过分,因为它exception.so从未作为 python 模块加载(但是,它确实使用了 libpython.so 中的一些代码)。鉴于许多 python 模块使用系统头文件,似乎包含一个用户构建的 C++ 库将是微不足道的。

4

0 回答 0