from future import scope problem

John Machin sjmachin at lexicon.net
Thu Mar 12 22:45:38 EDT 2009


On Mar 13, 1:20 pm, mykhal <michal.bo... at gmail.com> wrote:
> On Mar 13, 2:58 am, mykhal <michal.bo... at gmail.com> wrote:
>
>
>
> > On Mar 13, 12:46 am, Terry Reedy <tjre... at udel.edu> wrote:
>
> > > mykhal wrote:
> > > > hi,
> > > > importing from __future__ seems to have no effect when invoked in
> > > > local scope using exec statement.
> > > > I supposed
>
> > > > g = {}
> > > > exec 'from __future__ import division' in g
> > > > eval('1/2', g)
>
> > > > should yield 0.5, but it yields 0.
>
> > > > is it OK, or a bug?
>
> > > Please to read the fine manual.
>
> > > tjr
>
> > > ps.
>
> > > " future statement must appear near the top of the module. The only
> > > lines that can appear before a future statement are:
>
> > > the module docstring (if any),
> > > comments,
> > > blank lines, and
> > > other future statements.
> > > "
>
> > as you can see, my future import statement is the very first code of
> > the virtual module, using g dictionary as its globals. i know, it can
> > be barely called module..
> > if it produced SyntaxError in this exec/in usage as well, I'd have no
> > questions.
>
> now I can see, that following yields the desired division result.
>
> g = {}
> exec "from __future__ import division; x=1/2" in g
>
> someone without huge knowledge of Python implementation details might
> expect my original code to produce the same.

As might somebody who hadn't read the manual carefully enough before
mucking about with a combination of "exec" and "from __future__
import ..." :-)

It's very little to do with "implementation details". "from __future__
import ..." is documented to be a compile-time directive affecting
only the module (real or virtual) in which the directive appears.



More information about the Python-list mailing list