Antoon Pardon wrote: > Taking this in consideration I think the io.RawIOBase.read got it > backwards. > > The documentation says the following: > > | If 0 bytes are returned, and size was not 0, this indicates end of file. > | If the object is in non-blocking mode and no bytes are available, None > | is returned. > > But typically if you are reading in non-blocking mode, no bytes availabe > can be treated as if you receive an empty (byte)string. While reaching the > end of the stream is different. So it would have been more consistent if > an empty (byte)string was return in case of no bytes availabe and None or > io.EOF or something like that in case of end of file. > > Now I have to write things as follows: > > for block in iter(partial(RawStream.read, 1024), ''): > if block is not None: > for b in block > process(b)
or for block in ...: for b in block or (): process(b) > Otherwise I could write it more as follows: > > for block in iter(partial(RawStream.read, 1024), io.EOF): > for b in block > process(b) -- https://mail.python.org/mailman/listinfo/python-list