Division oddity

Raymond Hettinger python at rcn.com
Mon Jan 12 10:25:26 CET 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.


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())

Raymond Hettinger

More information about the Python-list mailing list