私は独自の Python 拡張機能を作成しています (SWIG を使用していますが、関連性がないことを願っています)。
C++ 側では、PyErr_NewException を使用してカスタム例外オブジェクトを作成しています。
// C++ - create a custom Python Exception class.
m = Py_InitModule((char *) "MyModule", SwigMethods);
g_pyMyErr = PyErr_NewException( "MyModule.MyErr", 0, 0 );
Py_INCREF(g_pyMyErr);
int result = PyModule_AddObject(m, "MyErr", g_pyMyErr);
上記のコードは成功値を返し、上記の例外を正常にスローして Python クライアント コードでキャッチできます。
問題は次のとおりです。Python コードで「MyErr」を参照すると、「MyErr」が定義されていないというエラーが表示されます。
// Python client code - catch the exception
from MyModule import *
try:
causeException()
catch MyErr: # Error: MyErr is not defined.
pass
catch Exception:
pass
編集: 私の現在の考えでは、SWIG が名前を変更 (マングリング) している可能性があります。