[C++-sig] Re: Exception translation to python classes

Mike Rovner mike at nospam.com
Mon Sep 22 21:50:11 CEST 2003


Niall Douglas wrote:

> I was wondering if anyone had any experience or could point me to
> some example code for translating C++ exceptions by using
> PyErr_SetObject to the Boost.Python wrap of the appropriate C++
> exception object.

I'm not quite sure what are you talking about.
PyErr_SetString is a simple wrapper for the PyErr_SetObject to make your
life easier
Consider:

  try: some()
  except Exception, e: recover(e)

You can have any 'e' as you wish. First call set it to a string, second to
any python object.

So in my code:

  static void exc_translator(Env::EGeneric* const& x)
  { PyErr_SetString(PyExc_RuntimeError, x->what() ); }
  ...// later
  register_exception_translator<Env::EGeneric*>(&exc_translator);

I use a string but (I suppose) you can put:

  { PyErr_SetObject(PyExc_RuntimeError, python::object(x) ); }

for any wrapped C++ instance 'x'; get it in your python code above as 'e'
and go from there, say call any (wrapped) method of x.

HTH,
Mike







More information about the Cplusplus-sig mailing list