On Fri, Jun 12, 2020 at 09:01:33AM +0100, Rob Cliffe via Python-Dev wrote:
> If I run the following program (using Python 3.8.3 on a Windows 10 laptop):
> 
> import sys, time
> for i in range(1,11):
>     sys.stdout.write('\r%d' % i)

In Python 2, the 'write()` method returns None, which is suppressed in 
the REPR. In Python 3, the `write` method returns the number of bytes 
(or characters, I forget which...) actually written, which is not 
suppressed.

I've been bitten by this myself, forgetting that in a script any result 
not bound to a variable gets silently thrown away, but in the REPL it 
gets printed.

> It appears that the requested characters are output, *followed by* the 
> number of characters output
> (which is the value returned by sys.stdout.write) and a newline.
> Surely this is not the intended behaviour.

Of course it is. The whole point of the REPL is to evaluate an 
expression and have the result printed. (That's the P in REPL :-)

`stdout.write(...)` is an expression that returns a value, so the REPL 
prints it.



-- 
Steven
_______________________________________________
Python-Dev mailing list -- python-dev@python.org
To unsubscribe send an email to python-dev-le...@python.org
https://mail.python.org/mailman3/lists/python-dev.python.org/
Message archived at 
https://mail.python.org/archives/list/python-dev@python.org/message/OWEUOVRPUR5JWALK32C3ZP6WESSUV6QK/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to