StringIO in 2.6 and beyond

pruebauno at latinmail.com pruebauno at latinmail.com
Tue Dec 9 17:39:14 CET 2008


On Dec 9, 11:28 am, Bill McClain
<20080915.20.wmccl... at spamgourmet.com> wrote:
> On 2008-12-08, Bill McClain <20080915.20.wmccl... at spamgourmet.com> wrote:
>
> > On 2008-12-08, Christian Heimes <li... at cheimes.de> wrote:
> > > In this context 'str' means Python 3.0's str type, which is unicode in
> > > 2.x. Please report the misleading error message.
> > So this is an encoding problem? Can you give me a hint on how to correct in my
> > example? I see that io.StringIO() has an encoding parameter, but I'm unclear
> > what to specify.
>
> I still don't have this working. I've been specifying encodings without
> success.
>
> The StringIO example usage in the Python 3.0 documentation here:
>
>      http://docs.python.org/3.0/library/io.html#io.StringIO
>
> gives me the same error on 2.6:
>
>     #! /usr/bin/env python
>
>     from __future__ import print_function
>     import io
>
>     output = io.StringIO()
>     output.write('First line.\n')
>     print('Second line.', file=output)
>
>     # Retrieve file contents -- this will be
>     # 'First line.\nSecond line.\n'
>     contents = output.getvalue()
>
>     # Close object and discard memory buffer --
>     # .getvalue() will now raise an exception.
>     output.close()
>
> ./stringio30.py
> Traceback (most recent call last):
>   File "./stringio30.py", line 7, in <module>
>     output.write('First line.\n')
>   File "/usr/local/lib/python2.6/io.py", line 1487, in write
>     s.__class__.__name__)
> TypeError: can't write str to text stream
>
> -Bill
> --
> Sattre Press                              History of Astronomyhttp://sattre-press.com/              During the 19th Century
> i... at sattre-press.com                       by Agnes M. Clerke
>                              http://sattre-press.com/han.html

This puzzles me too. According to the documentation StringIO accepts
both byte strings and unicode strings. Try to replace
   output.write('First line.\n')
with
   output.write(unicode('First line.\n'))
or
   output.write(str('First line.\n'))
and see if one of those works.



More information about the Python-list mailing list