On Fri, 03 Jun 2011 14:35:52 +1000, Chris Angelico wrote: > On Fri, Jun 3, 2011 at 2:23 PM, Steven D'Aprano > <steve+comp.lang.pyt...@pearwood.info> wrote: >>> You can't get a valid result from data produced by an invalid >>> computation. Garbage in, garbage out. >> >> Of course you can. Here's a trivial example: >> >> def f(x): >> return 1 >> >> > If your incoming x is garbage, your outgoing 1 is also garbage.
If there were non-garbage input where f(x) would return something other than 1, then you might argue that "well, we can't be sure what value f(x) should return, so we better return a NAN". But there is no such input. NANs are a tool, not poison. They indicate an invalid calculation. Not all calculations are critical. What do you do when you reach an invalid calculation and you can't afford to just give up and halt the program with an error? You try to fix it with another calculation! If you're in the fortunate situation that you can say "this bad input does not matter", then *that input does not matter*. Regardless of whether your input is a NAN, or you've just caught an exception, you have the opportunity to decide what the appropriate response is. You might not be able to fix the situation, in which case it is appropriate to return a NAN to signal to the next function that you don't have a valid result. But sometimes one bad value is not the end of the world. Perhaps you try again with a smaller step size, or you skip this iteration of the calculation, or you throw away the current value and start again from a different starting point, or do whatever is needed to get the result you want. In the case of my toy function, whatever is needed is... nothing at all. Just return 1, the same as you would for any other input, because the input literally does not matter for the output. -- Steven -- http://mail.python.org/mailman/listinfo/python-list