[New-bugs-announce] [issue43055] Inconsistent behaviour when using walrus operator with 'and'/'or'

Aman Anifer report at bugs.python.org
Thu Jan 28 06:58:35 EST 2021


New submission from Aman Anifer <fgoo.edu at hash.fyi>:

Using the walrus operator (:=) alongside 'and'/'or' shows inconsistent behaviour which changes with the order of given conditions. 

For example:
if(False and (x := 0)<1):
    print("Yes")
else:
    print(x)

Gives the error that 'NameError: name 'x' is not defined'
Whereas if the walrus operator is used first, like:
if((x := 0)>1 and False):
    print("Yes")
else:
    print(x)

Prints the value 0 without any error. This behaviour is the same when using 'or'. For example:

if(True or (y:=0)<1):
    print(y)
else:
    print("No")

Gives the same error but this:
if((y:=0)<1 or True):
    print(y)
else:
    print("No")

Prints the value 0.
I am guessing that this is because 'and' doesn't check the second operand if the first operand is False, also 'if' doesn't check the second operand if the first operand is True. I don't know if this is an intended behaviour.

Thanks

----------
components: Interpreter Core
messages: 385853
nosy: FuturisticGoo
priority: normal
severity: normal
status: open
title: Inconsistent behaviour when using walrus operator with 'and'/'or'
type: behavior
versions: Python 3.10, Python 3.8, Python 3.9

_______________________________________
Python tracker <report at bugs.python.org>
<https://bugs.python.org/issue43055>
_______________________________________


More information about the New-bugs-announce mailing list