これが私の問題です:
ダイナミックリンクライブラリとして構築された2つのC++モジュールAとBがあります。Aは、基本的な数学関数とカスタム例外タイプを提供します。Bは、Aを使用する上位レベルのモジュールです。
B :: someFunction()はAから関数を呼び出し、カスタム例外A:MyExceptionFromAをキャッチして、カスタムタイプB:MyExceptionFromBに変換しようとします(モジュールBのユーザーはAの実装の詳細を知る必要がないため) )。
私がC++ドメインに留まっている限り、すべてが正常に機能します。ただし、BoostPythonを介してPythonでB:: someFunction()を公開すると、C++モジュールで例外がキャッチされなくなります。
A:MyExceptionFromAの派生元であるstd :: runtime_errorをキャッチし、typeid(e).name()を呼び出して正しいマングル名を取得できるので、正しい例外がスローされることがわかります。したがって、問題は、このマングルされたシンボルを正しい例外タイプに解決することに起因すると思われます。
このリンクを見つけました。これは、「Pythonは[insular]モデルを使用して拡張モジュールを開くため、拡張モジュールの作成者は他の拡張モジュールが使用している可能性のあるシンボルを知る必要がない」と説明しています。これは問題/解決策の一部であると思われますが、問題を解決する方法を理解するためのシンボル解決について十分に理解していません。
何か案は?