Cythonから呼び出すときにカスタムC++例外を処理するのに問題があります。 私の状況は以下の通りです:すべての例外に対してCustomLibraryException
を使用するライブラリがあります。私が欲しいのは、基本的にはエラーメッセージを受け取ってPythonエラーを発生させることです。CythonでカスタムC++例外を処理する
user guideにはいくつかのヒントがありますが、それは少し不明です。 最初の可能性が行うことである:これはValueError
にCustomLibraryException
に変換
CDEFのINTバー()+とValueError
除いて、エラーメッセージを失います。
他の可能性は明示的に、私は本当にこのソリューションをunderstantません
cdef int raise_py_error()
cdef int something_dangerous() except +raise_py_error
を使用して、エラーを変換することです。私はraise_py_errorが何とかエラーを処理するC++関数でなければならないことを理解しました。私はそれをどう扱うかわからない。この関数は引数を取得せず、C++のcatch
ブロック内で呼び出されます。
CythonでC++例外を処理する実例があれば、大きな助けになるでしょう。
例外は期待通りに '' std :: runtime''から派生していません。助けてくれてありがとう:それはそれをはるかに良くすることはありません。エラーを発生させる関数はメンバ関数なので、コードを変更したくありません。これは私の[gco wrappers](http://peekaboo-vision.blogspot.de/2012/05/graphcuts-for-python-pygco.html)に関するもので、ライセンスでは私には再配布できません: -/ –
@ AndreasMueller:メンバ関数は独立した関数で簡単にラップできます。 'void wrapper(Obj&o、int ham){return o.wrapped(ham);}この関数は、最初の引数として操作するオブジェクトを渡します。 } ' –
ええ、私はまだそれをやるのが怠惰だと知っていました;) Btw、あなたはSOのトップ100のポスターだとお知りになりましたか? –