On Mar 13, 1:20 pm, mykhal <michal.bo...@gmail.com> wrote: > On Mar 13, 2:58 am, mykhal <michal.bo...@gmail.com> wrote: > > > > > On Mar 13, 12:46 am, Terry Reedy <tjre...@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. -- http://mail.python.org/mailman/listinfo/python-list