boost-python 无法捕获和翻译 c++ 异常
boost-python unable to catch and translate c++ exception
什么原因导致 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 的 header,在失败的断言宏中,该宏调用 CGAL 共享库中的信息失败函数。但是,re-defining 那个从扩展模块内部引发的宏没有帮助,独立于异常 class 来自 CGAL 或 std::exception 或 boost::exception child class。
有什么想法吗?
找到原因,与boost-python和共享库无关:
CGAL 代码从析构函数中抛出,这导致程序终止。另见:throwing exceptions out of a destructor.
什么原因导致 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 的 header,在失败的断言宏中,该宏调用 CGAL 共享库中的信息失败函数。但是,re-defining 那个从扩展模块内部引发的宏没有帮助,独立于异常 class 来自 CGAL 或 std::exception 或 boost::exception child class。
有什么想法吗?
找到原因,与boost-python和共享库无关:
CGAL 代码从析构函数中抛出,这导致程序终止。另见:throwing exceptions out of a destructor.