Problem: Windows Command line Pipe to stdin
Python 2.3 on Windows XP The following works when run from the command line. import sys text = sys.stdin.read() # do something on the text # ... sys.stdout.write(text) But if the above code is used as a filter program that gets another programs output as shown below, it fails as shown. C:\>textGen.py | filter.py Traceback (most recent call last): File "C:\filter.py", line 4, in ? text = sys.stdin.read() IOError: [Errno 9] Bad file descriptor Any ideas on what is happening and how to fix it? -- http://mail.python.org/mailman/listinfo/python-list
Inconsistent results from int(floatNumber)
I had some problems with some Python projects that gave variable results that I could not track down. Eventually and reluctantly I converted them to Java. Later, when I had more time I tried to analyze what the Python code was doing and found something strange. The following snippet illustrates the problem. >>> i = -50.0 >>> for x in xrange(5): i += 0.1 z = i * 10.0 print print z print int(z) -499.0 -499 -498.0 -498 -497.0 -496 -496.0 -495 -495.0 -494 The first two iterations look OK but after that the int(z) function returns the wrong value. It looks like the value was rounded down. If a just do this: >>> int(-497.0) -497 I get the value I expect. So what is the problem? It looks like a rounding problem but on the surface there is nothing to round. I am aware that there are rounding limitations with floating point arithmetic but the value passed to int() is always correct. What would cause it to be off by 1 full digit in only some cases? Perhaps something behind the scenes in the bowels of the interpreter ?. I could not get the thing to fail without being inside the for loop; does that have something to do with it? To fix the problem I could use round() or math.floor(). Like this. >>> i = -50.0 >>> for x in xrange(5): i += 0.1 z = i * 10.0 print print z print(round(z)) -499.0 -499.0 -498.0 -498.0 -497.0 -497.0 -496.0 -496.0 -495.0 -495.0 Why should I have to do this? Is there a general rule of thumb to know when this could be a problem? Should any float-to-int conversion be suspect? The above code was run in Python 2.5.4 on WinXP and Python 2.6.2 on Linux(Fedora12) Can anyone verify if this would be the same on 3.x? -- http://mail.python.org/mailman/listinfo/python-list
Re: Inconsistent results from int(floatNumber)
On Oct 25, 5:44 pm, gershar wrote: > I had some problems with some Python projects that gave variable > results that I could not track down. Eventually and reluctantly I > converted them to Java. Later, when I had more time I tried to analyze > what the Python code was doing and found something strange. The > following snippet illustrates the problem. > > >>> i = -50.0 > >>> for x in xrange(5): > > i += 0.1 > z = i * 10.0 > print > print z > print int(z) > > -499.0 > -499 > > -498.0 > -498 > > -497.0 > -496 > > -496.0 > -495 > > -495.0 > -494 > > The first two iterations look OK but after that the int(z) function > returns the wrong value. It looks like the value was rounded down. If > a just do this:>>> int(-497.0) > > -497 > I get the value I expect. > So what is the problem? > > It looks like a rounding problem but on the surface there is nothing > to round. I am aware that there are rounding limitations with floating > point arithmetic but the value passed to int() is always correct. What > would cause it to be off by 1 full digit in only some cases? Perhaps > something behind the scenes in the bowels of the interpreter ?. > > I could not get the thing to fail without being inside the for loop; > does that have something to do with it? > > To fix the problem I could use round() or math.floor(). Like this. > > >>> i = -50.0 > >>> for x in xrange(5): > > i += 0.1 > z = i * 10.0 > print > print z > print(round(z)) > > -499.0 > -499.0 > > -498.0 > -498.0 > > -497.0 > -497.0 > > -496.0 > -496.0 > > -495.0 > -495.0 > > Why should I have to do this? > > Is there a general rule of thumb to know when this could be a problem? > > Should any float-to-int conversion be suspect? > > The above code was run in Python 2.5.4 on WinXP and Python 2.6.2 on > Linux(Fedora12) > Can anyone verify if this would be the same on 3.x? Good responses from this group! Thanks for the insight Regards -- http://mail.python.org/mailman/listinfo/python-list