Funny behaviour with __future__ and doctest between 2.6 and 3.1
Peter Otten
__peter__ at web.de
Fri Jan 29 10:50:12 EST 2010
Mattsteel wrote:
> Hello all.
> I'm using Python 2.6.4 and Python 3.1.1.
> My wish is to code in a 3.1-compliant way using 2.6, so I'm importing
> the __future__ module.
> I've found a funny thing comparing the two folliwing snippets that
> differ for one line only, that is the position of __future__ import
> (before or after the doc string).
>
> Well, I understand the subtle difference but still I wander what
> really happen behind the scenes.
Are you sure? The second script has no module docstring, just a string
literal somewhere in the module, and therefore no tests. You can see that by
running it with the verbose option -v. Also,
from __future__ import unicode_literals
doesn't affect the repr() of a unicode instance. But the interactive
interpreter invokes repr() on the result before it is printed:
>>> from __future__ import unicode_literals
>>> "yadda"
u'yadda'
> Comments are welcome.
>
> ---------------------------------------
> #!/usr/bin/env python
> '''
> >>> concat('hello','world')
> 'hello world'
> '''
> from __future__ import unicode_literals
> def concat( first, second ):
> return first + ' ' + second
> if __name__ == "__main__":
> import doctest
> doctest.testmod()
> ---------------------------------------
> #!/usr/bin/env python
> from __future__ import unicode_literals
> '''
> >>> concat('hello','world')
> 'hello world'
> '''
> def concat( first, second ):
> return first + ' ' + second
> if __name__ == "__main__":
> import doctest
> doctest.testmod()
> ---------------------------------------
>
>
> The first way shows the following failure:
>
> ---------------------------------------
> Failed example:
> concat('hello','world')
> Expected:
> 'hello world'
> Got:
> u'hello world'
>
> ---------------------------------------
>
> Regards.
>
> Matt.
More information about the Python-list
mailing list