Je développe une application client-serveur dans laquelle le client appelle l'API d'un serveur qui fournit une interface Python pour l'entrée de l'utilisateur. Cela signifie que l'interface client et l'interface du serveur sont écrites en Python alors que le code du socket est en C++.Attraper une exception Python en C++
Du côté du serveur: -
J'ai une classe, Test
, en C++ et cette classe est héritée en Python nommé TestPython en utilisant la fonction de directeur SWIG. J'ai aussi une exception MyException en C++.
Maintenant, une fonction de la classe TestPython lance MyException()
à partir du code Python.
Je veux gérer l'exception levée à partir de Python dans le code C++ en utilisant SWIG.
extrait de code ci-dessous:
C++ Code-
class MyException
{
public:
string errMsg;
MyException();
MyException(string);
~MyException();
};
class Test
{
int value;
public:
void TestException(int val);
Test(int);
};
Python Code -
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
Maintenant, si la fonction TestException()
est appelée, elle devrait jeter MyException
. Je veux gérer cette exception MyException()
dans mon code C++.
Donc, quelqu'un peut-il suggérer ma façon de faire cela, je veux dire que dois-je écrire dans mon fichier * .i (interface) pour gérer cela.
Le TestException()
écrit en Python ci-dessus est appelé par le client, donc je dois informer le client si une exception est levée par le serveur.
Avez-vous déjà regardé la documentation SWIG sur ce sujet? (http://www.swig.org/Doc2.0/SWIGDocumentation.html#Customization_exception) – gecco
Vous pourriez vouloir rendre un peu plus évident que vous utilisez la fonction de directeur de SWIG - je l'ai manqué la première fois que j'ai lu ceci question, et il n'y a rien à suggérer du tout dans le code que vous avez montré. – Flexo
@gecco - cette documentation ne s'applique pas aux exceptions lancées par le code SWIG Python des directeurs (c'est-à-dire 'director: except') de façon très détaillée. – Flexo