Sure. On Aug 9, 2009, at 12:50 PM, Egor Zindy wrote:
> 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<wfsp...@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: wfsp...@sandia.gov ** >> >> >> >> >> >> >> > _______________________________________________ > NumPy-Discussion mailing list > NumPy-Discussion@scipy.org > http://mail.scipy.org/mailman/listinfo/numpy-discussion > ** Bill Spotz ** ** Sandia National Laboratories Voice: (505)845-0170 ** ** P.O. Box 5800 Fax: (505)284-0154 ** ** Albuquerque, NM 87185-0370 Email: wfsp...@sandia.gov ** _______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion