diff --git a/src/signal-base-py.cc b/src/signal-base-py.cc
index 40d85b9d74f972bac0f933da89f7095fefee50ac..97cf2c6d5c32e8bec5aaa1a75b206480535fb97f 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("");
       }
     }