[Numpy-discussion] SWIG, numpy.i and errno: comments?
Bill Spotz
wfspotz at sandia.gov
Sun Aug 9 09:30:59 EDT 2009
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