Bonjour à tous !


J'ai un programme C++ et j'externalise une partie du code avec des scripts. Pour cela j'utilise le wrapper SWIG avec le langage Python.
J'arrive à appeler des fonctions de mon script dans le programme C++ mais je n'ai aucun message en cas d'erreur dans une des fonction.

si par exemple dans mon script j'ai une fonction toute simple "ajouter" qui prend un nombre et affiche ce nombre +5

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
def ajouter(i):
    print i+5
si je lance cette fonction avec Python Shell, et qu'en paramètre je met autre chose qu'un entier, par exemple un string, il m'affiche bien une erreur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
>>> ajouter("ok")
 
Traceback (most recent call last):
  File "<pyshell#7>", line 1, in <module>
    ajouter("ok")
  File "D:\Dev\lib\dtSwigPython\scriptSwig.py", line 6, in ajouter
    print i+5
TypeError: cannot concatenate 'str' and 'int' objects

Mais si j'appelle cette fonction dans mon programme C++, il ne m'affiche pas d'erreur, il se contente d'ignorer l'appel à la fonction.

Je cherche donc un moyen de pouvoir débugger mon script python quand je le lance depuis le code C++.


Pour info, voila comment j'appelle les fonctions du script dans le code C++ :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
 
 
    Py_Initialize();
 
    m_pyName = PyString_FromString("scriptSwig");
 
    m_pyModule = PyImport_Import(m_pyName);	// Load the module object
    if(m_pyModule == NULL) std::cout<< "ERROR import script" << std::endl;
 
    m_pyDict = PyModule_GetDict(m_pyModule);	// pDict is a borrowed reference
    if(m_pyDict == NULL) std::cout<< "ERROR Dico" << std::endl;
 
    m_pyFunc = PyDict_GetItemString(m_pyDict, fctName);	// pFunc is also a borrowed reference
    if(m_pyFunc == NULL) std::cout<< "ERROR function" << std::endl;
 
    if (PyCallable_Check(m_pyFunc)) 
	{
		PyObject_CallFunction(m_pyFunc, NULL); // lancement de la fonction contenu dans le script Python
	}
	else 
        PyErr_Print();
 
// Clean up
    Py_DECREF(m_pyModule);
    Py_DECREF(m_pyName);
    Py_Finalize();
Merci d'avance