[Python-Dev] How io.IOBase.readline() should behave when used on non-blocking obj and no data available?

Paul Sokolovsky pmiscml at gmail.com
Thu Oct 16 02:54:32 CEST 2014


Hello,

io.RawIOBase.read() is well specified for behavior in case it
immediately gets a would-block condition: "If the object is in
non-blocking mode and no bytes are available, None is returned."
(https://docs.python.org/3/library/io.html#io.RawIOBase.read).

However, nothing is said about such condition for io.IOBase.readline(),
which is mixin method in a base class, default implementation of which
thus would use io.RawIOBase.read(). Looking at 3.4.0 source, iobase.c:
iobase_readline() has:

        b = _PyObject_CallMethodId(self, &PyId_read, "n", nreadahead);
[...]
        if (!PyBytes_Check(b)) {
            PyErr_Format(PyExc_IOError,
                         "read() should have returned a bytes object, "
                         "not '%.200s'", Py_TYPE(b)->tp_name);

I.e. it's not even ready to receive legitimate return value of None
from read(). I didn't try to write a testcase though, so may be missing
something.


So, how readline() should behave in this case, and can that be
specified in the Library Reference?


Thanks,
 Paul                          mailto:pmiscml at gmail.com


More information about the Python-Dev mailing list