Strange __future__ behavior in Python 2.5

M

mdsteele

My understanding of the __future__ statement is that you may say
something like:

from __future__ import foo, bar

to enable more than one feature. However, this does not seem to be
working properly in 2.5; it behaves as expected when typed into the
interactive interpreter, but not when it is in a module. When I try to
import the following module:

from __future__ import with_statement, division, absolute_import
def bar():
print 5/3
with open('asdf') as f:
for line in f: print line.strip()

I get a warning that 'with' will soon be a reserved keyword, and a
SyntaxError on the line with the with statement, so obviously, the
__future__ statement is not working. When I change the first line to:

from __future__ import with_statement
from __future__ import division,absolute_import

then the with statement works fine. However, the true division also
works fine, so apparently making multiple __future__ imports on one
line works for division, but not for with_statement.

Is this a bug, or am I misunderstanding something? I'm using the final
release of Python 2.5 (r25:51918, Sep 19 2006, 08:49:13) on Mac OS X.
 
A

Avizoa

My understanding of the __future__ statement is that you may say
something like:

from __future__ import foo, bar

to enable more than one feature. However, this does not seem to be
working properly in 2.5; it behaves as expected when typed into the
interactive interpreter, but not when it is in a module. When I try to
import the following module:
*snip*

Is this a bug, or am I misunderstanding something? I'm using the final
release of Python 2.5 (r25:51918, Sep 19 2006, 08:49:13) on Mac OS X.


Only one "from __future__" can be imported per line.

So,
from __future__ import foo
from __future__ import bar
etc.

It will only import the first if you give multiple.

Why this is, I don't know.
 
G

Georg Brandl

My understanding of the __future__ statement is that you may say
something like:

from __future__ import foo, bar

to enable more than one feature. However, this does not seem to be
working properly in 2.5; it behaves as expected when typed into the
interactive interpreter, but not when it is in a module. When I try to
import the following module:

from __future__ import with_statement, division, absolute_import
def bar():
print 5/3
with open('asdf') as f:
for line in f: print line.strip()

I get a warning that 'with' will soon be a reserved keyword, and a
SyntaxError on the line with the with statement, so obviously, the
__future__ statement is not working. When I change the first line to:

from __future__ import with_statement
from __future__ import division,absolute_import

then the with statement works fine. However, the true division also
works fine, so apparently making multiple __future__ imports on one
line works for division, but not for with_statement.

Is this a bug, or am I misunderstanding something? I'm using the final
release of Python 2.5 (r25:51918, Sep 19 2006, 08:49:13) on Mac OS X.

This is a bug and has now been fixed in the SVN repo.
Thanks for bringing it up.

Georg
 
A

Avizoa

Georg said:
This is a bug and has now been fixed in the SVN repo.
Thanks for bringing it up.


Ouch, I feel bad now. I've been noticing this behavior since 2.5B1 but
I didn't realize it was a bug.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,007
Latest member
obedient dusk

Latest Threads

Top