From 680ec0c813d62bf1b4ff65e4e5b0bc44e91e9be2 Mon Sep 17 00:00:00 2001 From: florent <florent@laas.fr> Date: Mon, 5 Jul 2010 10:23:10 +0200 Subject: [PATCH] Catch exceptions in signal set and get value methods. * src/signal-base-py.cc. --- src/signal-base-py.cc | 39 +++++++++++++++++++++++++++++++++++---- 1 file changed, 35 insertions(+), 4 deletions(-) diff --git a/src/signal-base-py.cc b/src/signal-base-py.cc index 40d85b9..97cf2c6 100644 --- a/src/signal-base-py.cc +++ b/src/signal-base-py.cc @@ -8,8 +8,14 @@ #include <sstream> #include <dynamic-graph/signal-base.h> +#include <boost/numeric/ublas/vector.hpp> +#include <boost/numeric/ublas/io.hpp> +#include <dynamic-graph/signal-caster.h> + +typedef boost::numeric::ublas::vector<double> Vector; using dynamicgraph::SignalBase; +dynamicgraph::DefaultCastRegisterer<Vector> vectorCast; namespace dynamicgraph { namespace python { @@ -75,8 +81,19 @@ namespace dynamicgraph { SignalBase<int>* signal = (SignalBase<int>*)pointer; std::ostringstream value; - signal->get(value); - return Py_BuildValue("s", value.str()); + try { + signal->get(value); + } catch (const dynamicgraph::ExceptionAbstract& exc) { + PyErr_SetString(error, exc.getStringMessage().c_str()); + return NULL; + } catch (const std::exception& exc) { + PyErr_SetString(error, exc.what()); + } catch (...) { + PyErr_SetString(error, "Unknown exception"); + return NULL; + } + std::string valueString = value.str(); + return Py_BuildValue("s", valueString.c_str()); } PyObject* setValue(PyObject* self, PyObject* args) @@ -92,9 +109,23 @@ namespace dynamicgraph { pointer = PyCObject_AsVoidPtr(object); SignalBase<int>* signal = (SignalBase<int>*)pointer; - std::istringstream value(valueString); + std::ostringstream os; + os << valueString; + std::istringstream value(os.str()); + + try { + signal->set(value); + } catch (const dynamicgraph::ExceptionAbstract& exc) { + PyErr_SetString(error, exc.getStringMessage().c_str()); + return NULL; + } catch (const std::exception& exc) { + PyErr_SetString(error, exc.what()); + return NULL; + } catch (...) { + PyErr_SetString(error, "Unknown exception"); + return NULL; + } - signal->set(value); return Py_BuildValue(""); } } -- GitLab