[C++-sig] Exception translation
Albert Strasheim
fullung at gmail.com
Fri Jun 15 23:38:14 CEST 2007
Hello all
I want to translate some of my exceptions from C++ to Python.
I have registered an exception translator and it works rather well. However,
I would like my translated exceptions to have their own type in Python, so I
don't simply want to do:
PyErr_SetString(PyExc_UserWarning, ex.what());
in my exception translator.
Instead, I want my exception translator to take the exception, clone it
(luckily I have an exception base class that allows me to do this),
construct an instance of its wrapper type around it and use PyErr_SetObject
instead.
Something along these lines has been discussed previously:
http://mail.python.org/pipermail/c++-sig/2006-April/010618.html
Later in thread, Dave Abrahams said:
Officially, it [Python] does require that exceptions be derived from
PyExc_Exception (I don't remember where that's documented), but
unofficially, you can throw anything :)
I assume this policy exists so that users can write try/except blocks that
catch Exception and have it catch any type derived from Exception.
Now my question: is there a way to derive the Boost.Python wrapper type of
my C++ exception class from PyExc_Exception using Boost.Python? I want to do
this so that my exceptions can be caught in scenario described above.
Even better, is there a way to derive an arbitrary Boost.Python wrapper type
of any C++ class from an arbitrary Python type? This might turn out to be
very handy for integrating C++ matrix libraries with NumPy.
Thanks for any help.
Cheers,
Albert
P.S. In thread, Roman Yakovenko mentioned that he might add support for this
kind of thing to pyplusplus. Did something happen in this regard?
More information about the Cplusplus-sig
mailing list