How to register an exception translation?¶
Boost.Python provides functionality to translate any C++ exception to a Python one. Py++ provides a convenient API to do this.
By the way, be sure to take a look on “troubleshooting guide - exceptions”. The guide will introduces a complete solution for handling exceptions within Python scripts.
from pyplusplus import module_builder_t mb = module_builder_t( ... ) my_exception = mb.class_( 'my_exception' ) translate_code = 'PyErr_SetString(PyExc_RuntimeError, exc.what();' my_exception.exception_translation_code = translate_code
That’s all, really. Py++ will generate for you the
definition and than will register it.
I think this is a most popular use case - translate a C++ exception to a string and than to create an instance of Python built-in exception. That is exactly why Py++ provides additional API:
mb = module_builder_t( ... ) my_exception = mb.class_( 'my_exception' ) my_exception.translate_exception_to_string( 'PyExc_RuntimeError', 'exc.what()')
The first argument of
translate_exception_to_string method is exception type,
The second one is a string - code that converts your exception to
As you see, it is really simple to add exception translation to your project.
One more point, in both pieces of code I used “
exc” as the name of
class instance. This is a predefined name. I am not going to change it without
any good reason, any time soon :-).