On Mon, Nov 8, 2010 at 3:20 PM, Warren Weckesser < [email protected]> wrote:
> > > On Mon, Nov 8, 2010 at 2:52 PM, Skipper Seabold <[email protected]>wrote: > >> On Mon, Nov 8, 2010 at 3:45 PM, Warren Weckesser >> <[email protected]> wrote: >> > >> > >> > On Mon, Nov 8, 2010 at 2:17 PM, Skipper Seabold <[email protected]> >> wrote: >> >> >> >> On Mon, Nov 8, 2010 at 3:14 PM, Skipper Seabold <[email protected]> >> >> wrote: >> >> > I am doing some optimizations on random samples. In a small number >> of >> >> > cases, the objective is not well-defined for a given sample (it's not >> >> > possible to tell beforehand and hopefully won't happen much in >> >> > practice). What is the most numpythonic way to handle this? It >> >> > doesn't look like I can use np.seterrcall in this case (without >> >> > ignoring its actual intent). Here's a toy example of the method I >> >> > have come up with. >> >> > >> >> > import numpy as np >> >> > >> >> > def reset_seterr(d): >> >> > """ >> >> > Helper function to reset FP error-handling to user's original >> >> > settings >> >> > """ >> >> > for action in [i+'='+"'"+d[i]+"'" for i in d]: >> >> > exec(action) >> >> > np.seterr(over=over, divide=divide, invalid=invalid, under=under) >> >> > >> >> >> >> It just occurred to me that this is unsafe. Better options for >> >> resetting seterr? >> > >> > >> > Hey Skipper, >> > >> > I don't understand why you need your helper function. Why not just pass >> the >> > saved dictionary back to seterr()? E.g. >> > >> > saved = np.seterr('raise') >> > try: >> > # Do something dangerous... >> > result = whatever... >> > except Exception: >> > # Handle the problems... >> > result = better result... >> > np.seterr(**saved) >> > return result >> > >> >> Ha. I knew I was forgetting something. Thanks. >> >> > Your question reminded me to file an enhancement request that I've been > meaning to suggest for a while: > http://projects.scipy.org/numpy/ticket/1667 > > I just discovered that a context manager for the error settings already exists: numpy.errstate. So a nicer way to write that code is: with np.errstate(all='raise'): try: # Do something dangerous... result = whatever... except Exception: # Handle the problems... result = better result... return result Warren
_______________________________________________ NumPy-Discussion mailing list [email protected] http://mail.scipy.org/mailman/listinfo/numpy-discussion
