What is the correct way to port codecs.open to python 3.1?

MRAB python at mrabarnett.plus.com
Sat Nov 7 08:11:47 EST 2009


Baptiste Lepilleur wrote:
> After applying 2to3.py to port a 2.6 script to 3.1, I get the following 
> error when running my script:
>   File "purekeyworddbtest.py", line 143, in __init__
>     f = codecs.open(EXCLUDED_KEYWORDS_FILE, 'rt', 'utf-8')
>   File "c:\Python31\lib\codecs.py", line 870, in open
>     file = builtins.open(filename, mode, buffering)
> ValueError: can't have text and binary mode at once
> 
> I skimmed through python 3.0 release notes, and I haven't seen anything 
> indicating that codecs.open behaviour has changed in incompatible way 
> (just that it is no longer useful). Have I missed something?
> 
> Do I need to replace all codecs.open with the built-in open function? If 
> so, why does codecs.open still exist?
> 
The documentation says of codecs.open() that "Files are always opened in
binary mode, even if no binary mode was specified", but you've given the
mode as 'rt', so you're asking it to open the file both in text mode
_and_ binary mode. This is the same as in Python 2.6.

If it works in 2.6 but not in 3.1, perhaps it's just that in 2.6 it
ignores the 't' whereas in 3.1 it complains.



More information about the Python-list mailing list