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