From af8d842056db188fcc581beefd18c026455607c6 Mon Sep 17 00:00:00 2001 From: Florent Lamiraux <florent@laas.fr> Date: Thu, 10 Mar 2011 15:10:52 +0100 Subject: [PATCH] Systematically catch std::exception abstract in python bindings. This avoids to miss exceptions and to terminate the python interpreter. --- src/entity-py.cc | 16 ++++++++-------- src/signal-base-py.cc | 13 ++----------- 2 files changed, 10 insertions(+), 19 deletions(-) diff --git a/src/entity-py.cc b/src/entity-py.cc index 976a2b8..866f52c 100644 --- a/src/entity-py.cc +++ b/src/entity-py.cc @@ -26,7 +26,6 @@ using dynamicgraph::Entity; using dynamicgraph::SignalBase; -using dynamicgraph::ExceptionAbstract; using dynamicgraph::command::Command; using dynamicgraph::command::Value; using dynamicgraph::Vector; @@ -96,8 +95,8 @@ namespace dynamicgraph { try { name = entity->getName(); - } catch(ExceptionAbstract& exc) { - PyErr_SetString(error, exc.getStringMessage().c_str()); + } catch(const std::exception& exc) { + PyErr_SetString(error, exc.what()); return NULL; } return Py_BuildValue("s", name.c_str()); @@ -127,8 +126,8 @@ namespace dynamicgraph { SignalBase<int>* signal = NULL; try { signal = &(entity->getSignal(std::string(name))); - } catch(ExceptionAbstract& exc) { - PyErr_SetString(error, exc.getStringMessage().c_str()); + } catch(const std::exception& exc) { + PyErr_SetString(error, exc.what()); return NULL; } // Return the pointer to the signal without destructor since the signal @@ -164,8 +163,9 @@ namespace dynamicgraph { count++; } return result; - } catch(ExceptionAbstract& exc) { - PyErr_SetString(error, exc.getStringMessage().c_str()); + } catch(const std::exception& exc) { + PyErr_SetString(error, exc.what()); + return NULL; } return NULL; } @@ -223,7 +223,7 @@ namespace dynamicgraph { try { Value value = pythonToValue(PyValue, valueType); valueVector.push_back(value); - } catch (ExceptionAbstract& exc) { + } catch(const std::exception& exc) { std::stringstream ss; ss << "Error while parsing argument " << iParam+1 << ": " << exc.what() << "."; diff --git a/src/signal-base-py.cc b/src/signal-base-py.cc index 21cef5f..78354f6 100644 --- a/src/signal-base-py.cc +++ b/src/signal-base-py.cc @@ -111,7 +111,7 @@ namespace dynamicgraph { std::ostringstream oss; try { obj->display(oss); - } catch (std::exception& exc) { + } catch (const std::exception& exc) { PyErr_SetString(error, exc.what()); return NULL; } @@ -134,7 +134,7 @@ namespace dynamicgraph { std::ostringstream oss; try { obj->displayDependencies(oss,time); - } catch (std::exception& exc) { + } catch (const std::exception& exc) { PyErr_SetString(error, exc.what()); return NULL; } @@ -179,9 +179,6 @@ namespace dynamicgraph { std::ostringstream value; 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 (...) { @@ -207,9 +204,6 @@ namespace dynamicgraph { std::string name; try { name = signal->getName(); - } 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 (...) { @@ -238,9 +232,6 @@ namespace dynamicgraph { 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; -- GitLab