异常处理 – 通过boost python解决模块间异常名称不起作用?

这是我的问题:

我有两个C模块,A和B,它们构建为动态链接库. A提供基本数学函数和自定义异常类型. B是使用A的更高级别的模块.

B :: someFunction()从A调用一个函数,并尝试捕获自定义异常A:MyExceptionFromA以将其转换为自定义类型B:MyExceptionFromB(因为模块B的用户不需要知道A的实现细节).

只要我留在C域中,一切正常.但是,如果我通过boost pythonpython中公开B :: someFunction(),则不会在C模块中捕获异常.

我可以捕获从A:MyExceptionFromA派生的std :: runtime_error,并调用typeid(e).name()来获取正确的错位名称,因此我知道抛出了正确的异常.因此,我怀疑问题来自于将这个受损的符号解析为正确的异常类型.

我找到了this link,它解释了“python使用[insular]模型打开扩展模块,因此扩展模块编写者不需要知道其他扩展模块可能使用的符号.”我怀疑这是问题/解决方案的一部分,但我对符号解析知之甚少,无法弄清楚如何解决我的问题.

有任何想法吗?

最佳答案 我找到了解决问题的方法.
Based on this
link text,我想通了加入

import sys, dl
sys.setdlopenflags(dl.RTLD_NOW|dl.RTLD_GLOBAL)

在我的包括解决问题之前,通过强制python以立即的全局模式打开库.但我仍然希望有另一种解决方案,如果有的话.正如在第一个链接中所提到的,我怀疑这可能会产生无法预料的影响(我已经知道名称冲突可能是一个问题,我怀疑性能也会受到影响,但是还有其他副作用吗?)

点赞