Skip to content
Snippets Groups Projects
Commit c26d21ef authored by Oliver Sander's avatar Oliver Sander Committed by sander@FU-BERLIN.DE
Browse files

add error handling. Patch by Christian Engwer

[[Imported from SVN: r3331]]
parent 5d8374dd
No related branches found
No related tags found
No related merge requests found
...@@ -98,6 +98,14 @@ struct EmbeddedPython ...@@ -98,6 +98,14 @@ struct EmbeddedPython
PyObject* pModule = PyImport_Import(pModuleName); PyObject* pModule = PyImport_Import(pModuleName);
PyObject* pMember = PyObject_GetAttrString(pModule, memberName.c_str()); PyObject* pMember = PyObject_GetAttrString(pModule, memberName.c_str());
if (!pModuleName)
DUNE_THROW(Dune::Exception, "failed to construct python string for " << moduleName);
if (!pModule)
DUNE_THROW(Dune::Exception, "failed to retrieve python module " << moduleName);
if (!pMember)
DUNE_THROW(Dune::Exception, "failed to retrieve python member " << memberName
<< " from module " << moduleName);
// decrement reference counts // decrement reference counts
Py_DECREF(pModuleName); Py_DECREF(pModuleName);
Py_DECREF(pModule); Py_DECREF(pModule);
...@@ -111,6 +119,13 @@ struct EmbeddedPython ...@@ -111,6 +119,13 @@ struct EmbeddedPython
PyObject* pClassArgs = PyTuple_New(0); PyObject* pClassArgs = PyTuple_New(0);
PyObject* pObject = PyObject_CallObject(pClass, pClassArgs); PyObject* pObject = PyObject_CallObject(pClass, pClassArgs);
if (!pClass)
DUNE_THROW(Dune::Exception, "failed to retrieve python class " << className);
if (!pClassArgs)
DUNE_THROW(Dune::Exception, "failed to create python class arguments");
if (!pObject)
DUNE_THROW(Dune::Exception, "failed to create python class object for class " << className);
// decrement reference counts // decrement reference counts
Py_DECREF(pClass); Py_DECREF(pClass);
Py_DECREF(pClassArgs); Py_DECREF(pClassArgs);
...@@ -222,7 +237,9 @@ class PythonFunction : ...@@ -222,7 +237,9 @@ class PythonFunction :
PyRun_SimpleString(s.str().c_str()); PyRun_SimpleString(s.str().c_str());
// get reference for python function // get reference for python function
setCallable(EmbeddedPython::getModuleMember("__main__", name), true); PyObject* fnkt = EmbeddedPython::getModuleMember("__main__", name);
assert(fnkt != 0);
setCallable(fnkt, true);
} }
virtual ~PythonFunction() virtual ~PythonFunction()
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment