[PyQt] Raising C++ exceptions from python
Alessandro Pasotti
apasotti at gmail.com
Mon Oct 13 11:48:33 BST 2014
2014-10-13 10:49 GMT+02:00 Phil Thompson <phil at riverbankcomputing.com>:
> On 13/10/2014 8:48 am, Alessandro Pasotti wrote:
>>
>> Hello,
>>
>> What is the recommended way to raise/throw a C++ exception from python
>> to be catched in C++ code?
>>
>> For example, I have this SIP code:
>>
>> class QgsMapServiceException
>> {
>> %TypeHeaderCode
>> #include <qgsmapserviceexception.h>
>> %End
>> public:
>> QgsMapServiceException( const QString& code, const QString& message );
>> QString code() const;
>> QString message() const;
>> };
>>
>>
>> In python code I would like to raise this exception and catch it from
>> C++ FCGI loop.
>>
>> The problem is that Python doesn't know that QgsMapServiceException is
>> an exception:
>>
>> raise QgsMapServiceException('ExceptionFilter', 'Test exception
>> raised from ExceptionFilter')
>> TypeError: exceptions must be old-style classes or derived from
>> BaseException, not QgsMapServiceException
>
>
> http://pyqt.sourceforge.net/Docs/sip4/directives.html#directive-%Exception
>
> Phil
Hi Phil,
Thanks for pointing me to the right docs, I've now this SIP code but I
cannot catch anything from C++ loop, it seems like the exceptions are
silently ignored. I would like to raise exceptions from python and
catch them in C++.
Any idea about where to look?
Should I throw the exception from within RaiseCode ? (tried without success).
%Exception QgsMapServiceException(SIP_Exception) /PyName=QgsMapServiceException/
{
%TypeHeaderCode
#include <qgsmapserviceexception.h>
%End
%RaiseCode
SIP_BLOCK_THREADS
PyErr_SetString(sipException_QgsMapServiceException,
sipExceptionRef.message().toUtf8().constData() );
SIP_UNBLOCK_THREADS
%End
};
--
Alessandro Pasotti
w3: www.itopen.it
More information about the PyQt
mailing list