[C++-sig] try-except for non-standard exception
Roman Yakovenko
roman.yakovenko at gmail.com
Tue Apr 15 19:10:53 CEST 2008
On Tue, Apr 15, 2008 at 5:17 PM, Håkon Groven <hgroven at emgs.com> wrote:
> Hi!
>
> I'm trying to expose my cpp-defined exception so that i can do something
> like this in Python:
>
> try:
> value = someObject.someFunction()
> except Pyelio.ElioError, e:
> print e.what()
>
> I have tried to do the following in the cpp wrapper:
>
> namespace
> {
> struct emgs_elio_ElioError_Wrapper: ElioError
> {
> emgs_elio_ElioError_Wrapper(PyObject* py_self_, const
> ElioError& p0):
> ElioError(p0), py_self(py_self_)
> {}
>
> emgs_elio_ElioError_Wrapper(PyObject* py_self_):
> ElioError(), py_self(py_self_)
> {}
>
> emgs_elio_ElioError_Wrapper(PyObject* py_self_, const
> std::string& p0):
> ElioError(p0), py_self(py_self_)
> {}
>
> const char* what() const throw()
> {
> return call_method< const char* >(py_self, "what");
> }
>
> const char* default_what() const
> {
> return ElioError::what();
> }
>
> PyObject* py_self;
> };
>
> void translate(ElioError const& e)
> {
> PyErr_SetString(PyErr_NewException(
> "Pyelio.ElioError",
> PyExc_StandardError, NULL),
> e.what());
> };
> }
>
> BOOST_PYTHON_MODULE(Pyelio)
> {
> register_exception_translator<ElioError>(&translate();
>
> class_< ElioError, emgs_elio_ElioError_Wrapper >("ElioError", init<
> const ElioError& >())
> .def(init< optional< const std::string& > >())
> .def("what", (const char* (ElioError::*)() const
> throw())&ElioError::what, (const char*
> (emgs_elio_ElioError_Wrapper::*)()
> const)&emgs_elio_ElioError_Wrapper::default_what)
> .def("printStackTrace", &ElioError::printStackTrace)
> ;
>
> }
>
> Because of my translate function my exception is a standard error on the
> python side and not a Pyelio.ElioError. However, if i print type(e) in
> python I get the string from my translate func: "Pyelio.ElioError".
>
> I would be very thankful if anybody could help me out/post a minimal
> example of how to wrap/expose a cpp-defined exception.
http://language-binding.net/pyplusplus/troubleshooting_guide/exceptions/exceptions.html
HTH
--
Roman Yakovenko
C++ Python language binding
http://www.language-binding.net/
More information about the Cplusplus-sig
mailing list