[issue35869] io.BufferReader.read() returns None

2019-02-01 Thread Martin Panter

Martin Panter  added the comment:

This is covered by Issue 13322. There are a few other BufferedReader methods 
that contradict the documentation for non-blocking mode.

A while ago I posted a patch to change the implementation to match the 
documentation, but nobody reviewed it or gave their opinion. These days I would 
prefer to just documentat the reality: the methods might raise an exception 
rather than returning None, or perhaps no particular behaviour at all is 
expected in general in the non-blocking case. But I don’t spend much time on 
Python now, so you might have to find someone else to move this forward.

Regarding the entry for “BufferedReader.read”, it would make more sense to 
remove the last “if”: “if ‘size’ is not given . . ., until EOF, or the ‘read’ 
call would block”. But I don’t think even that is complete, because it should 
also say the read stops and returns short in the non-blocking case even when 
“size” is positive.

--
assignee:  -> docs@python
components: +Documentation, IO
nosy: +docs@python, martin.panter
superseder:  -> buffered read() and write() does not raise BlockingIOError

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue35869] io.BufferReader.read() returns None

2019-01-31 Thread Steve Palmer


Steve Palmer  added the comment:

The description of read in io.BufferedReader.read function states "Read and 
return size bytes, or if size is not given or negative, until EOF or if the 
read call would block in non-blocking mode."  This does mention the non-block 
mode scenario, but I can't parse this sentence.

--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue35869] io.BufferReader.read() returns None

2019-01-31 Thread Steve Palmer


New submission from Steve Palmer :

class io.BufferedIOBase states "In addition, those methods [read(), readinto() 
and write()] can raise BlockingIOError if the underlying raw stream is in 
non-blocking mode and cannot take or give enough data; unlike their RawIOBase 
counterparts, they will never return None."

However, class.io.BufferedReader (inheriting from io.BufferedIOBase) *does* 
return None in this case.  Admittedly, io.BufferedReader does says it is 
overriding the inherited method, but I'm surprised that change in behaviour 
declared for buffered objects, is reverted to the RarIOBase behaviour on a more 
specific class.

The attached file (a little long - sorry), simulates a slow non-blocking raw 
file, which it wraps in a BufferReader to test the behaviour defined in 
BufferedIOBase.

--
files: read2.py
messages: 334630
nosy: steverpalmer
priority: normal
severity: normal
status: open
title: io.BufferReader.read() returns None
type: behavior
versions: Python 3.7
Added file: https://bugs.python.org/file48091/read2.py

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com