[C++-sig] Python exceptions in functions called from C++

Stefan Seefeld seefeld at sympatico.ca
Wed Jun 9 21:41:14 CEST 2010


On 06/09/2010 03:11 PM, Charles Solar wrote:
> I have a boost python library that I build python scripts with.  I am 
> not embedding python, I think that is worth mentioning right off the bat.
> In my C++ library I have a separate thread calling into python 
> occasionally 

If you call Python from C++, why are you saying you are not embedding 
Python ? What do you mean by that ?

> and I am finding that if the function I call in python has a python 
> error in it, eg:
>
> def callMe():
>   crash = "Hello world"
>   return crash()
>
> When my C++ app calls that I get the error_already_set exception from 
> boost python.  My problem with that is it offers no information from 
> python like 'Strings are not callable on line 200 in crash.py'  So my 
> question is how can I connect the error_already_set exception on the 
> other thread to python's exception handler so if python produces an 
> exception while calling from C++ I get the python exception 
> information and not just 'error already set'?

Right now you need to use the Python C API to fetch those details (see
http://docs.python.org/c-api/exceptions.html?highlight=pyerr_fetch#PyErr_Fetch).

I keep meaning to write C++ wrappers around that API, but it always 
falls off of my (fixed-size) TODO list. Perhaps someone else will beat 
me  to it ? ;-)

     Stefan

-- 

       ...ich hab' noch einen Koffer in Berlin...



More information about the Cplusplus-sig mailing list