On Sun, Nov 16, 2014 at 1:51 PM, Francesco Biscani <bluesca...@gmail.com>
wrote:

>
> This can result in an exception being thrown from Python (e.g., comparison
> of a numpy array with zero). What happens in this case is that
> a bp::error_already_set is thrown and not caught by anything, and the
> execution terminates.
>
> I can catch the error_already_set in the comparison operator, print
> information about the Python exception that was thrown, etc. but what I
> clearly need to do here is to stop the execution of the program and somehow
> get back to the Python interpreter and translate the exception.
>
>
bp::error_already_set should actually already be doing exactly what you
want; the reason it exists is so Boost.Python can catch it and translate it
into a Python exception, and any Boost.Python-wrapped function that throws
error_already_set should have it caught and translated without having to do
anything special.

That means your problem is actually one of debugging why that's not working
properly.  There have been some reports of problems with error_already_set
in cases where some C++ compilers/linkers don't recognize an exception as
being the same across dynamic library boundaries.  I'm not familiar with
the details, but that's my best guess as to what's going on.  Hopefully
that will provide you a starting point for debugging and googling for
solutions (or maybe someone else on this list can help diagnose it).

Good luck!


Jim
_______________________________________________
Cplusplus-sig mailing list
Cplusplus-sig@python.org
https://mail.python.org/mailman/listinfo/cplusplus-sig

Reply via email to