Hi Bjorn,

On Wed, May 08, 2002 at 02:50:19PM -0600, Bjorn Pettersen wrote:
> Is there a way in SIP to translate from C++ exceptions to Python
> exceptions? I.e. I have a C++ method that can throw FooException, I want
> to be able to either catch an automagically wrapped SIP version of this
> class. If this isn't possible directly any workarounds would be
> appreciated..
I've been using SIP for porting larger C++ libraries for quite a while
and therefore had to implement a few missing things (operators and 
exceptions). I sent the patches for a very early version of SIP
to Phil several ages ago (SIP 0.x), however he probably didn't like my code... :)
Anyway, I ported my current code to SIP 3.2.1 today; patches are attached.
The patches should be applied to a clean SIP 3.2.1 using

  patch -p1 < sip-3.2.1_exceptions.patch

Also included is a simple example explaining the use of exceptions.
Basically, I added the C++ keyword "throw" to the parser and an additional
"-e" flag to sip, which enables exception support.
If sip is called with -e, try/catch blocks are created around each 
C++ function call. If you specify the type of exception thrown by your
method, specialized catch blocks are created for each exception type you specify.
E.g. the line
  void normalize() throw(DivisionByZero);
in a SIP input file would translate to the following C++ wrapper code:
  try
  {
    sipCpp -> Vector::normalize();
  }
  catch (DivisionByZero& e)
  {
    .... // some code returning the exception object to Python    
  }
--
Just give it a try and don't hesitate to contact me if you encounter
any problems.

Cheers,
  Oliver

----
 Dr. Oliver Kohlbacher ([EMAIL PROTECTED], [EMAIL PROTECTED])
 Center for Bioinformatics, Saarland University, Saarbruecken, Germany
 Celera Genomics, Informatics Research, Rockville, MD, USA
 Tel: +1-240-453-3264 Fax: +1-240-453-3324 (Tel: +49-681-64703 [CBI])

Attachment: sip-exceptions.tar.gz
Description: application/tar-gz

Reply via email to