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])
sip-exceptions.tar.gz
Description: application/tar-gz
