[Numpy-discussion] numpy error handling
tim.hochberg at cox.net
Sun Apr 2 08:41:24 CDT 2006
Rob Hooft wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
> Travis Oliphant wrote:
> | save = numpy.seterr(dividebyzero='warn')
> | ...
> | numpy.seterr(restore=save)
> Most of this discussion is outside of my scope, but I have programmed
> this kind of pattern in a different way before:
> ~ save = context.push(something)
> ~ ...
> ~ del save
> i.e. the destructor of the saved context object restores the old
> situation. In most cases it will be called by letting "save" go out of
> scope. I know that relying on timely object destruction can be
> troublesome when porting to Jython, but it is very convenient in CPython.
> If that goes too far, one could make a separate method on save:
> ~ save.pop()
> This can do sanity checking too (are we really at the top of the stack?
> Only called once?). The destructor should check whether pop has been
Well, the syntax that *I* really want is this:
def __init__(self, all=None, overflow=None, underflow=None,
self._args = (overflow, overflow, underflow, dividebyzero,
self._save = numpy.seterr(*self._args)
That way, in a few months, I can do this:
# do stuff
and it will be almost impossible to mess up. This syntax is lighter and
cleaner than a stack or relying on garbage collection to free the
resources. So, for my purposes, the simple syntax Travis proposes is
perfectly adequate and simpler to implement and get right than a stack
based approach. If 'with' wasn't coming down the pipe, I would push for
a stack, but I like Travis' proposal just fine.
YMMV of course.
More information about the Numpy-discussion