Division oddity
Raymond Hettinger
python at rcn.com
Mon Jan 12 04:25:26 EST 2004
[Tim Rowe]
> > If I do from __future__ import division then eval(1/2) gives me 0.5 as
> > expected. But if I do print input("enter a sum: ") and enter 1/2 as
> > the sum I get 0 as if I hadn't done the import. I thought input was
> > supposed to give the same behaviour as an eval on raw input -- why the
> > difference here?
[Paul Rubin[
> The input function is calling eval from the context of the module
> where 'input' itself is defined. If you use "from __future__ import
> division" in module A and have "print 3/2" in module B, the value of
> 3/2 in module B shouldn't be affected by the input, since module B
> may depend on integer division having the old behavior.
Right!
So, the way to get eval() to respond to the import is to pass along
the current environment:
>>> from __future__ import division
>>> eval('9/2', globals())
4.5
Raymond Hettinger
More information about the Python-list
mailing list