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
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 def ajouter(i): print i+5
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++ :
Merci d'avance
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();
Partager