boost-python无法捕获并转换c ++异常

时间:2015-05-19 23:04:37

标签: python c++ exception boost boost-python

有什么理由可以让boost-python无法捕获在使用它帮助编写的扩展模块中抛出的异常并将其转换为python?相反,解释器与terminate called after throwing an instance of '<some_excpetion_class>'崩溃。

我的扩展模块正在使用 CGAL 中的一些函数,它们动态链接到这些函数,并抛出异常。它还动态链接到boost_python共享库。我在Linux上。它是用'-std=c++11'编写的,我更喜欢用clang进行编译。

我的第一个想法是,这是在共享库边界上抛出异常的问题。但是,我做了我能想象到的一切来避免这个问题,这表明它与此无关:

  • 异常转换适用于从我的代码中抛出的其他异常
  • 我尝试使用clang 3.4和gcc 4.8.2
  • 进行编译
  • 代码抛出是来自CGAL的标头,在一个失败的断言宏中,它在CGAL共享库中调用info一个失败函数。但是,如果异常类来自CGAL或std :: exception或boost :: exception子类,则重新定义该宏以使其从扩展模块中引发并没有帮助。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

找到原因,与boost-python和共享库无关:

CGAL代码从析构函数抛出,导致程序终止。另见:throwing exceptions out of a destructor