On 2022-03-28 23:59, Chris Angelico wrote:
On Tue, 29 Mar 2022 at 09:53, Ethan Furman <et...@stoneleaf.us> wrote:

In the following bit of code:


     while s := input.read(MAXBINSIZE):
         while len(s) < MAXBINSIZE and ns := input.read(MAXBINSIZE-len(s)):
             s += ns
         line = binascii.b2a_base64(s)
         output.write(line)

I'm getting this error on the second line:

     cannot use assignment expressions with expression

Can somebody explain why that isn't working?


I'm getting a good hint from the exception in 3.11:

while len(s) < MAXBINSIZE and ns := input.read(MAXBINSIZE-len(s)):
   File "<stdin>", line 1
     while len(s) < MAXBINSIZE and ns := input.read(MAXBINSIZE-len(s)):
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
SyntaxError: cannot use assignment expressions with expression

Looks like it's counting "len(s) < MAXBINSIZE and ns" as the
assignment target. Parens around the second half would solve that.

I think that's because assignment has low precedence, lower than that of the RHS, because the RHS needs to be evaluated before the assignment, but the consequence of that it that the preceding expression will also get evaluated first, consuming the identifier, leaving a trailing ':='. It's easier just to complain and require on parentheses than to back up while parsing.
_______________________________________________
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/Q6XOY2KCSZP2VZTKFBDF2OT7MG7EB7AP/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to