socket.makefile raises ValueError when mode = 'rt'

Antoon Pardon antoon.pardon at
Wed Jan 9 15:14:46 CET 2013

Op 01/09/13 14:54, Dave Angel schreef:
> On 01/09/2013 08:22 AM, Antoon Pardon wrote:
>> This is using python 3.2.
>> But the documentation states:
>> socket.makefile(mode='r', buffering=None, *, encoding=None, errors=None,
>> newline=None)
>>     Return a file object associated with the socket. The exact returned
>> type depends on the arguments given to makefile(). These arguments are
>> interpreted the same way as by the built-in open() function.
>> And since 't' is allowed in the mode of the built-in open() function I
>> would consider this a bug.
>> Unless I am missing something?
> I believe that 't' was a new addition to mode, for Python 3.x     So
> perhaps the socket library hasn't kept consistent with it.
> I don't really know the socket library.  Does it even support text
> mode?  Does that make sense?  Remember that text mode means a different
> thing in 3.x than it did in 2.x
As far as I understand the code, it does support text. This is part of
the makefile method.

   def makefile(self, mode="r", buffering=None, *,
                 encoding=None, errors=None, newline=None):

        for c in mode:
            if c not in {"r", "w", "b"}:
                raise ValueError("invalid mode %r (only r, w, b allowed)")
        writing = "w" in mode
        reading = "r" in mode or not writing
        assert reading or writing
        binary = "b" in mode
        if binary:
            return buffer
        text = io.TextIOWrapper(buffer, encoding, errors, newline)
        text.mode = mode
        return text

So it seems that if the mode is not binary an io.TextIOWrapper is
returned. That indicates to me that
text mode is supported.

Antoon Pardon

More information about the Python-list mailing list