私はクライアントがサーバーのAPIを呼び出してユーザー入力用のPythonインターフェイスを提供するサーバークライアントアプリケーションを開発しています。つまり、クライアントインターフェイスとサーバーインターフェイスはPythonで書かれていますが、ソケットコードはC++で書かれています。サーバー側ではC++でPython例外をキャッチ
: -
私はC++で、クラス、Test
を持っていると、このクラスはPythonで継承されているがSWIGのディレクター機能を使用してTestPythonを命名しました。 また、私はC++で例外クラスMyExceptionを持っています。
TestPythonクラスの関数は、PythonコードからMyException()
をスローします。
SWIGを使用しているC++コードでPythonからスローされた例外を処理したいと考えています。 - TestException()
関数が呼び出された場合今
class TestPython(Test):
def __init__(self):
Test.__init__(self)
def TestException(self,val):
if val > 20:
throw MyException("MyException : Value Exceeded !!!")
else:
print "Value passed = ",val
、それは
MyException
をスローする必要があり
C++コード -
class MyException
{
public:
string errMsg;
MyException();
MyException(string);
~MyException();
};
class Test
{
int value;
public:
void TestException(int val);
Test(int);
};
Pythonのコード:
は、以下のコードです。私はこのMyException()
の例外を私のC++コードで処理したい。
誰も私のやり方を示唆することができます。私は、これを処理するために私の* .i(インタフェース)ファイルに何を書き込むべきですか?
上記のTestException()
はPythonで記述されているため、クライアントから例外がスローされた場合はクライアントに通知する必要があります。
このトピックに関するSWIGのドキュメントをご覧になりましたか? (http://www.swig.org/Doc2.0/SWIGDocumentation.html#Customization_exception) – gecco
SWIGのディレクター機能を使用していることをもう少し明白にしたいと思うかもしれません。あなたが表示したコードでは何もヒントがありません。 – Flexo
@gecco - ディレクターからのSWIG Pythonコード(例外的に 'director:except')によってスローされた例外については、まったく詳しくは書かれていません。 – Flexo