[C++-sig] Handling a custom C++ exception from Python
Alex Leach
beamesleach at gmail.com
Sun Jun 2 22:37:10 CEST 2013
On Sun, 02 Jun 2013 21:04:51 +0100, Александров Петр
<petr_aleksandrov at mail.ru> wrote:
> 02.06.2013 13:14, Alex Leach пишет:
>> 1. Boost Python has a dedicated exception handling API[1] that
>> doesn't require you to wrap the exception in a class_<> template. The
>> class_ template is a bit heavy duty for registering exceptions, I
>> think. Instead, I register exceptions like this:-
>>
>> #include <boost/python/exception_translator.hpp>
>>
>> void TranslateMyException(const MyException& err)
>> {
>> PyErr_SetString(PyExc_Exception, err.ptr());
>> }
>>
>> void RegisterMyExceptionTranslator(void)
>> {
>> boost::python::register_exception_translator<
>> MyException&>( TranslateMyException );
>> }
> I want to pass some info (it is numbers) from C++ to Python with the
> exception. This info is stored in C++ exception object fields. Using
> class_ I allow accessing these fields from Python.
Well, that is one way to do it. Above, in TranslateMyException, you can do
whatever you like with the C++ exception, though. I've been doing it that
way,usually just creating a human-readable message from the C++ exception,
then using the above mechanisms to set the exception for Python. To give
your exception extra Python attributes, you might consider using the raw
Python C API function, PyErr_NewException[1]. Your call, though.
Cheers,
Alex
[1]: http://docs.python.org/2/c-api/exceptions.html#PyErr_NewException
More information about the Cplusplus-sig
mailing list