improved error handling at module import time

This commit is contained in:
Wenzel Jakob 2015-12-26 14:04:52 +01:00
parent 9d573f44b9
commit dd57a34e2d
2 changed files with 18 additions and 3 deletions

View File

@ -67,12 +67,24 @@
#endif
#if PY_MAJOR_VERSION >= 3
#define PYBIND11_PLUGIN(name) \
#define PYBIND11_PLUGIN_IMPL(name) \
extern "C" PYBIND11_EXPORT PyObject *PyInit_##name()
#else
#define PYBIND11_PLUGIN(name) \
#define PYBIND11_PLUGIN_IMPL(name) \
extern "C" PYBIND11_EXPORT PyObject *init##name()
#endif
#define PYBIND11_PLUGIN(name) \
static PyObject *pybind11_init(); \
PYBIND11_PLUGIN_IMPL(name) { \
try { \
return pybind11_init(); \
} catch (const std::exception &e) { \
PyErr_SetString(PyExc_ImportError, e.what()); \
return nullptr; \
} \
} \
PyObject *pybind11_init()
NAMESPACE_BEGIN(pybind11)

View File

@ -471,7 +471,10 @@ public:
}
static module import(const char *name) {
return module(PyImport_ImportModule(name), false);
PyObject *obj = PyImport_ImportModule(name);
if (!obj)
throw std::runtime_error("Module \"" + std::string(name) + "\" not found!");
return module(obj, false);
}
};