StringIO in 2.6 and beyond

Christian Heimes lists at cheimes.de
Mon Dec 8 13:55:31 EST 2008


Bill McClain wrote:
> I've just installed 2.6, had been using 2.4.
> 
> This was working for me:
> 
>     #! /usr/bin/env python
>     import StringIO
>     out = StringIO.StringIO()
>     print >> out, 'hello'
> 
> I used 2to3, and added import from future to get:
> 
>     #! /usr/bin/env python
>     from __future__ import print_function
>     import io
>     out = io.StringIO()
>     print('hello', file=out)
> 
> ....which gives an error:
> 
> Traceback (most recent call last):
>   File "./example.py", line 5, in <module>
>     print('hello', file=out)
>   File "/usr/local/lib/python2.6/io.py", line 1487, in write
>     s.__class__.__name__)
> TypeError: can't write str to text stream
> 
> ....which has me stumped. Why can't it?

In this context 'str' means Python 3.0's str type, which is unicode in 
2.x. Please report the misleading error message.

Christian




More information about the Python-list mailing list