diff --git a/src/dynamic-graph-py.cc b/src/dynamic-graph-py.cc index 08ca7c804542737e3bf7631a566bc9b03f6c1bca..aed5d5357b123ba59bd36cabb005bcc583e35762 100644 --- a/src/dynamic-graph-py.cc +++ b/src/dynamic-graph-py.cc @@ -57,7 +57,7 @@ namespace dynamicgraph { PyObject* getSignalTypeList(PyObject* self, PyObject* args); } - PyObject* error; + PyObject* dgpyError; /** \brief plug a signal into another one. @@ -95,7 +95,7 @@ namespace dynamicgraph { try { signalIn->plug(signalOut); } catch (std::exception& exc) { - PyErr_SetString(error, exc.what()); + PyErr_SetString(dgpyError, exc.what()); return NULL; } return Py_BuildValue(""); @@ -212,8 +212,8 @@ initwrap(void) std::string msg("dynamic_graph.error"); - dynamicgraph::python::error = + dynamicgraph::python::dgpyError = PyErr_NewException(const_cast<char*>(msg.c_str()), NULL, NULL); - Py_INCREF(dynamicgraph::python::error); - PyModule_AddObject(m, "error", dynamicgraph::python::error); + Py_INCREF(dynamicgraph::python::dgpyError); + PyModule_AddObject(m, "error", dynamicgraph::python::dgpyError); } diff --git a/src/entity-py.cc b/src/entity-py.cc index 976a2b8efc3a427050bbc544937fe4671a0d78dd..2942665532f6b7b5b1d58def16edd4cb4826b211 100644 --- a/src/entity-py.cc +++ b/src/entity-py.cc @@ -35,7 +35,7 @@ using dynamicgraph::Matrix; namespace dynamicgraph { namespace python { - extern PyObject* error; + extern PyObject* dgpyError; using namespace convert; namespace entity { @@ -65,7 +65,7 @@ namespace dynamicgraph { obj = dynamicgraph::g_factory.newEntity(std::string(className), std::string(instanceName)); } catch (std::exception& exc) { - PyErr_SetString(error, exc.what()); + PyErr_SetString(dgpyError, exc.what()); return NULL; } } @@ -97,7 +97,7 @@ namespace dynamicgraph { try { name = entity->getName(); } catch(ExceptionAbstract& exc) { - PyErr_SetString(error, exc.getStringMessage().c_str()); + PyErr_SetString(dgpyError, exc.getStringMessage().c_str()); return NULL; } return Py_BuildValue("s", name.c_str()); @@ -128,7 +128,7 @@ namespace dynamicgraph { try { signal = &(entity->getSignal(std::string(name))); } catch(ExceptionAbstract& exc) { - PyErr_SetString(error, exc.getStringMessage().c_str()); + PyErr_SetString(dgpyError, exc.getStringMessage().c_str()); return NULL; } // Return the pointer to the signal without destructor since the signal @@ -165,7 +165,8 @@ namespace dynamicgraph { } return result; } catch(ExceptionAbstract& exc) { - PyErr_SetString(error, exc.getStringMessage().c_str()); + PyErr_SetString(dgpyError, exc.getStringMessage().c_str()); + return NULL; } return NULL; } @@ -202,7 +203,7 @@ namespace dynamicgraph { if (commandMap.count(std::string(commandName)) != 1) { std::string msg = "command " + std::string(commandName) + " is not referenced in Entity " + entity->getName(); - PyErr_SetString(error, msg.c_str()); + PyErr_SetString(dgpyError, msg.c_str()); return NULL; } Command* command = commandMap[std::string(commandName)]; @@ -212,7 +213,7 @@ namespace dynamicgraph { std::stringstream ss; ss << "command takes " << typeVector.size() << " parameters, " << size << " given."; - PyErr_SetString(error, ss.str().c_str()); + PyErr_SetString(dgpyError, ss.str().c_str()); return NULL; } @@ -227,7 +228,7 @@ namespace dynamicgraph { std::stringstream ss; ss << "Error while parsing argument " << iParam+1 << ": " << exc.what() << "."; - PyErr_SetString(error, ss.str().c_str()) ; + PyErr_SetString(dgpyError, ss.str().c_str()) ; return NULL; } } @@ -236,7 +237,7 @@ namespace dynamicgraph { Value result = command->execute(); return valueToPython(result); } catch (const std::exception& exc) { - PyErr_SetString(error, exc.what()) ; + PyErr_SetString(dgpyError, exc.what()) ; return NULL; } return NULL; @@ -282,7 +283,7 @@ namespace dynamicgraph { // Retrieve the entity instance if (!PyCObject_Check(object)) { - PyErr_SetString(error, "first argument is not an object"); + PyErr_SetString(dgpyError, "first argument is not an object"); return NULL; } void* pointer = PyCObject_AsVoidPtr(object); @@ -293,7 +294,8 @@ namespace dynamicgraph { try { command = map[commandName]; } catch (const std::exception& exc) { - PyErr_SetString(error, exc.what()); + PyErr_SetString(dgpyError, exc.what()); + return NULL; } std::string docstring = command->getDocstring(); return Py_BuildValue("s", docstring.c_str()); @@ -306,7 +308,7 @@ namespace dynamicgraph { if (!PyArg_ParseTuple(args, "O", &object) || (!PyCObject_Check(object)) ) { - PyErr_SetString(error, "first argument is not an object"); + PyErr_SetString(dgpyError, "first argument is not an object"); return NULL; } void* pointer = PyCObject_AsVoidPtr(object); diff --git a/src/factory-py.cc b/src/factory-py.cc index 12fbc9b1f13cf14c68170a68bbfb031678ce4ffc..a821440335f065724010a03a56d587bacf081d20 100644 --- a/src/factory-py.cc +++ b/src/factory-py.cc @@ -22,8 +22,6 @@ using dynamicgraph::ExceptionAbstract; namespace dynamicgraph { namespace python { - - extern PyObject* error; namespace factory { diff --git a/src/signal-base-py.cc b/src/signal-base-py.cc index 21cef5f93e98c44ea72a2edc887722b2f95a6edb..93b7984eac259ea9d9dcdfe0612bc6895c8f2368 100644 --- a/src/signal-base-py.cc +++ b/src/signal-base-py.cc @@ -28,11 +28,12 @@ using dynamicgraph::SignalBase; namespace dynamicgraph { namespace python { - extern PyObject* error; + extern PyObject* dgpyError; using namespace convert; namespace signalBase { + static void destroy (void* self); /** @@ -85,7 +86,7 @@ namespace dynamicgraph { if (!PyArg_ParseTuple(args,"Oi", &object, &time)) return NULL; if (!PyCObject_Check(object)) { - PyErr_SetString(error, "object should be a C object"); + PyErr_SetString(dgpyError, "object should be a C object"); return NULL; } @@ -112,7 +113,7 @@ namespace dynamicgraph { try { obj->display(oss); } catch (std::exception& exc) { - PyErr_SetString(error, exc.what()); + PyErr_SetString(dgpyError, exc.what()); return NULL; } return Py_BuildValue("s", oss.str().c_str()); @@ -135,7 +136,7 @@ namespace dynamicgraph { try { obj->displayDependencies(oss,time); } catch (std::exception& exc) { - PyErr_SetString(error, exc.what()); + PyErr_SetString(dgpyError, exc.what()); return NULL; } return Py_BuildValue("s", oss.str().c_str()); @@ -180,12 +181,13 @@ namespace dynamicgraph { try { signal->get(value); } catch (const dynamicgraph::ExceptionAbstract& exc) { - PyErr_SetString(error, exc.getStringMessage().c_str()); + PyErr_SetString(dgpyError, exc.getStringMessage().c_str()); return NULL; } catch (const std::exception& exc) { - PyErr_SetString(error, exc.what()); + PyErr_SetString(dgpyError, exc.what()); + return NULL; } catch (...) { - PyErr_SetString(error, "Unknown exception"); + PyErr_SetString(dgpyError, "Unknown exception"); return NULL; } std::string valueString = value.str(); @@ -208,12 +210,13 @@ namespace dynamicgraph { try { name = signal->getName(); } catch (const dynamicgraph::ExceptionAbstract& exc) { - PyErr_SetString(error, exc.getStringMessage().c_str()); + PyErr_SetString(dgpyError, exc.getStringMessage().c_str()); return NULL; } catch (const std::exception& exc) { - PyErr_SetString(error, exc.what()); + PyErr_SetString(dgpyError, exc.what()); + return NULL; } catch (...) { - PyErr_SetString(error, "Unknown exception"); + PyErr_SetString(dgpyError, "Unknown exception"); return NULL; } return Py_BuildValue("s", name.c_str()); @@ -239,13 +242,13 @@ namespace dynamicgraph { try { signal->set(value); } catch (const dynamicgraph::ExceptionAbstract& exc) { - PyErr_SetString(error, exc.getStringMessage().c_str()); + PyErr_SetString(dgpyError, exc.getStringMessage().c_str()); return NULL; } catch (const std::exception& exc) { - PyErr_SetString(error, exc.what()); + PyErr_SetString(dgpyError, exc.what()); return NULL; } catch (...) { - PyErr_SetString(error, "Unknown exception"); + PyErr_SetString(dgpyError, "Unknown exception"); return NULL; } @@ -267,7 +270,8 @@ namespace dynamicgraph { try { signal->recompute(time); } catch (const std::exception& exc) { - PyErr_SetString(error, exc.what()); + PyErr_SetString(dgpyError, exc.what()); + return NULL; } return Py_BuildValue(""); } @@ -286,7 +290,8 @@ namespace dynamicgraph { try { signal->unplug(); } catch (const std::exception& exc) { - PyErr_SetString(error, exc.what()); + PyErr_SetString(dgpyError, exc.what()); + return NULL; } return Py_BuildValue(""); } diff --git a/src/signal-caster-py.cc b/src/signal-caster-py.cc index dff8e5344eaab26668ac599821d9ae652da0617d..2b7185446019cdd9764715d6b610c72b5fc6c548 100644 --- a/src/signal-caster-py.cc +++ b/src/signal-caster-py.cc @@ -22,8 +22,6 @@ namespace dynamicgraph { namespace python { - extern PyObject* error; - namespace signalCaster { PyObject* getSignalTypeList(PyObject* /*self*/, PyObject* args) {