Randall Hopper <[EMAIL PROTECTED]> writes: > What is the correct way to propagate exceptions from Python callbacks? > > When I do this: > > Python -> C++ -> Python Callback > > (example attached) an exception raised in the callback doesn't make it back > across C++ to Python. > > It appears that PyGILState_Release() at the bottom of the callback > wrapper is resetting the error state (as I can set a global based on > PyErr_Occurred() there, and can catch that up in the exception handler in > Python). > > This obviously isn't correct. What should I be doing? > > Thanks, > > Randall > > > ------------------------------------------------------------------------------ > void callback_wrapper( void *user_data ) > { > // Acquire interpreter lock > PyGILState_STATE gstate = PyGILState_Ensure(); > ... > // Call Python > pyresult = PyEval_CallObject( pyfunc, pyargs ); > ... > /*********** At this point, PyErr_Occurred() is true **************/ > /****** But it's not true when we return through C++ to Python ******/
if (pyresult == NULL) PyErr_Print(); > // Free interpreter lock > PyGILState_Release(gstate); > } PyErr_Print() will do the 'right' thing´s. Thomas -- http://mail.python.org/mailman/listinfo/python-list