[Numpy-discussion] SWIG, numpy.i and errno: comments?
Egor Zindy
ezindy at gmail.com
Sun Aug 9 12:50:52 EDT 2009
Bill,
thank you for your comment. Would this do instead? (replacing the
return NULL with SWIG_fail):
%exception
{
errno = 0;
$action
if (errno != 0)
{
switch(errno)
{
case EPERM:
PyErr_Format(PyExc_IndexError, "Index out of range");
break;
case ENOMEM:
PyErr_Format(PyExc_MemoryError, "failed malloc()");
break;
default:
PyErr_Format(PyExc_Exception, "Unknown exception");
}
SWIG_fail;
}
}
Cheers,
Egor
On Sun, Aug 9, 2009 at 2:30 PM, Bill Spotz<wfspotz at sandia.gov> wrote:
> Egor,
>
> This looks about right. However, it is customary to invoke the SWIG macro
> "SWIG_fail;" instead of "break;". (This translates into a "goto" to the
> failure label, and is better in case there is any other cleanup code to
> execute.)
>
> On Aug 9, 2009, at 6:17 AM, Egor Zindy wrote:
>
>> Hello list,
>>
>> this is my attempt at generating python exceptions in SWIG/C using the
>> errno mechanism:
>>
>> http://www.scipy.org/Cookbook/SWIG_NumPy_examples#head-10f49a0f5ea6b313127d2ec5ffa1eaf1c133cb22
>>
>> Used together with numpy.i, this has been useful for notifying (in a
>> pythonic way) memory allocation errors or array index problems.
>>
>> A change in the errno global variable is detected in the %exception
>> part of the SWIG interface file, and Python exceptions are generated
>> after $action depending on the errno error code value.
>>
>> %exception
>> {
>> errno = 0;
>> $action
>>
>> if (errno != 0)
>> {
>> switch(errno)
>> {
>> case EPERM:
>> PyErr_Format(PyExc_IndexError, "Index out of range");
>> break;
>> case ENOMEM:
>> PyErr_Format(PyExc_MemoryError, "Failed malloc()");
>> break;
>> default:
>> PyErr_Format(PyExc_Exception, "Unknown exception");
>> }
>> return NULL;
>> }
>> }
>>
>> If there's a better way of doing this, I'll update the cookbook recipe.
>>
>> Regards,
>> Egor
>
> ** Bill Spotz **
> ** Sandia National Laboratories Voice: (505)845-0170 **
> ** P.O. Box 5800 Fax: (505)284-0154 **
> ** Albuquerque, NM 87185-0370 Email: wfspotz at sandia.gov **
>
>
>
>
>
>
>
More information about the NumPy-Discussion
mailing list