On Wed, 19 May 2010 16:02:38 -0700, Qin Shen <[email protected]> wrote: > Hi there, > > I'm fairly new on SIP and haven't done any development on PyQt. > But I'm using SIP to write a python wrapper for our C++ library. > > I have tried to translate the C++ exceptions to Python exceptions. > So far I managed to get it to work, but I had to change the > auto-generated sipcode, which is not what I wanted. The following > is what I did, could any of you tell me what I have missed and > how I can avoid manually changing the generated sipcode? > > > (1) The .sip file > -------------------------------------------------- > %Exception TipShotgun::Shotgun::Exception(SIP_Exception) > /PyName=ShotgunException/ > { > %TypeHeaderCode > #include <TipShotgun/Shotgun.h> > %End > %RaiseCode > const char *detail = sipExceptionRef.what(); > > SIP_BLOCK_THREADS > PyErr_SetString(sipException_TipShotgun_Shotgun_Exception, detail); > SIP_UNBLOCK_THREADS > %End > }; > > > (2) I run "sip" command with the "-e" flag which enables the support > for C++ exceptions. The auto-generated sip .cpp code looks like > this BEFORE I made any changes manually. > -------------------------------------------------- > try > { > sipRes = new std::string(sipCpp->sgRole()); > } > catch (...) > { > sipRaiseUnknownException(); > return NULL; > } > > > (3) Here is the sip .cpp code AFTER I added the changes. > --------------------------------------------------------- > try > { > sipRes = new std::string(sipCpp->sgRole()); > } > catch (TipShotgun::Shotgun::Exception &error) > { > PyErr_SetString(sipException_TipShotgun_Shotgun_Exception, > error.what()); > return NULL; > } > catch (...) > { > sipRaiseUnknownException(); > return NULL; > } > > > (4) My python test script > ---------------------------------------------------------- > #!/usr/bin/env python > > from _shotgun import * > sg = TipShotgun.Shotgun() > user = sg.findUserByLogin("farny") > try: > role = user.sgRole() > except ShotgunException, err: > print err > > print > print "THE END OF TEST" > > ------------------------------------------------------- > With (1), (3) & (4), everything works fine. Without the manual updates made > to the sip .cpp code, it just won't work. Any help will be greatly > appreciated.
It looks like your .sip file that wraps the sgRole() method is missing the throw() part. Phil _______________________________________________ PyQt mailing list [email protected] http://www.riverbankcomputing.com/mailman/listinfo/pyqt
