boost::python Export Custom Exceptionに対する受け入れられた回答は、C++ からカスタム例外クラスをエクスポートする方法を示し、Boost.Python カスタム例外クラスは、Python の例外から継承する例外クラスをエクスポートする方法を示します。どうすれば両方を行うことができますか? これは、情報を取得するためのカスタム メソッドを持つ例外クラスを公開し、そのクラスを Python の Exception から派生させることです。
質問する
1036 次
1 に答える
5
Jim Bosch がC++-sig listで提案した実行可能な解決策は、ラップされた C++ 例外から継承する代わりに合成を使用することです。このコードでは、ここで行うように Python 例外を作成し、ラップされた C++ 例外を Python 例外のインスタンス変数として追加する必要があります。
void translator(const MyCPPException &x) {
bp::object exc(x); // wrap the C++ exception
bp::object exc_t(bp::handle<>(bp::borrowed(exceptionType)));
exc_t.attr("cause") = exc; // add the wrapped exception to the Python exception
PyErr_SetString(exceptionType, x.what());
}
ラップされた C++ 例外は、次のように Python からアクセスできます。
try:
...
except MyModule.MyCPPExceptionType as e:
cause = e.cause # wrapped exception can be accessed here
しかし、例外もキャッチされます
try:
...
except Exception:
...
于 2012-08-02T04:04:00.247 に答える