Header
<boost/python/exception_translator.hpp>

Contents

Introduction

As described here, it
is important to make sure that exceptions thrown by C++ code do not pass
into the Python interpreter core. By default, Boost.Python translates all
C++ exceptions thrown by wrapped functions and module init functions into
Python, but the default translators are extremely limited: most C++
exceptions will appear in Python as a RuntimeError
exception whose representation is
'Unidentifiable C++ Exception'. To produce better
error messages, users can register additional exception translators as
described below.

The expression translate(x) must either throw a C++
exception, or a subsequent call to PyErr_Occurred()
must return 1.

Effects: Adds a copy of translate to the sequence of
exception translators tried when Boost.Python catches an exception that
is about to pass into Python's core interpreter. The new translator
will get "first shot" at translating all exceptions matching the catch
clause shown above. Any subsequently-registered translators will be
allowed to translate the exception earlier. A translator which cannot
translate a given C++ exception can re-throw it, and it will be handled
by a translator which was registered earlier (or by the default
translator).