[PyQt] [SIP] Raise exception if Boolean return value is False

Phil Thompson phil at riverbankcomputing.com
Wed Jan 22 15:08:38 GMT 2014

On 22-01-2014 2:03 pm, Christian Aichinger wrote:
> Hi!
> I have several C functions that take an /Out/ parameter and return a
> bool to indicate success. SIP transforms this into a (bool, out_val)
> return on the Python side. Is there any way to generate a Python
> signature that returns the /Out/ value and raises an Exception if the
> boolean error return is False?
> What I have:
> SIP: bool MetersPerPixel(const MapPixelCoord &pos, double *mpp 
> /Out/);
>>>> success, mpp = MetersPerPixel(coord)
> What I want:
>>>> try: mpp = MetersPerPixel(coord)
>>>> except: # Handle the error case
> Currently I work around the issue by defining a new C++ function in
> %ModuleCode, which is then wrapped by SIP:
> %ModuleCode
> double MetersPerPixel(const MapPixelCoord &pos) {
>     double dbl;
>     if (!MetersPerPixel(pos, &dbl)) {
>         std::runtime_error("MetersPerPixel() failed.");
>     }
>     return dbl;
> }
> %End
> double MetersPerPixel(const MapPixelCoord &pos);

Better to use %MethodCode.

> However, I have a lot of these functions, and would rather not
> explicitly wrap all of them.

Sorry, no. An alternative would be to change the C++ library to raise a 
C++ exception.


More information about the PyQt mailing list