New submission from Aman Anifer <fgoo....@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 <rep...@bugs.python.org> <https://bugs.python.org/issue43055> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com