[Python-Dev] Deprecate codecs.open() and StreamWriter/StreamReader

Martin (gzlist) gzlist at googlemail.com
Tue May 24 21:39:32 CEST 2011


On 24/05/2011, Victor Stinner <victor.stinner at haypocalc.com> wrote:
>
> In Python 2, codecs.open() is the best way to read and/or write files
> using Unicode. But in Python 3, open() is preferred with its fast io
> module. I would like to deprecate codecs.open() because it can be
> replaced by open() and io.TextIOWrapper. I would like your opinion and
> that's why I'm writing this email.

There are some modules that try to stay compatible with Python 2 and 3
without a source translation step. Removing the codecs classes would
mean they'd have to add a few more compatibility hacks, but could be
done.

As an aside, I'm still not sure how the io module should be used.
Example, a simple task I've used StreamWriter classes for is to wrap
stdout. If the stdout.encoding can't represent a character, using
"replace" means you can write any unicode string without throwing a
UnicodeEncodeError.

With the io module, it seems you need to construct a new TextIOWrapper
object, passing the attributes of the old one as parameters, and as
soon as someone passes something that's not a TextIOWrapper (say, a
StringIO object) your code breaks. Is the intention that code dealing
with streams needs to be covered in isinstance checks in Python 3?

Martin


More information about the Python-Dev mailing list