It's certainly a contrived example. Actual code with such a mistake is generally far more subtle.

The mistake is that it's assigning a value within a clause of a conditional that won't be evaluated.

Oh well. I'll suffer the then worsened zig-zaggy eye movements in code reviews caused by defining values at the end of expressions that reference them which fit on a single line.

There are a number of bad examples for style guides in these threads.


I wasn't aware of this switch, thanks!
coverage run --branch

On Friday, April 27, 2018, Tim Peters <> wrote:
Wes, sorry, but I really don't follow what you're saying.  For example,

[Wes Turner <>]
> Do not do this:
> x = 2
> if (x == 3) or (x := 3):
>    print(x)
> What do we call that mistake?

It displays 3 - while it appears to be silly code, there's nothing
about it that's undefined.  So I fail to see how showing that example
anywhere would do anyone any good.

You can do the same kind of thing today via, e.g.,

    class Bindable:
        def __init__(self, value):

        def bind(self, value):
            self.value = value
            return value

        def __bool__(self):
            return bool(self.value)

        def __eq__(self, other):
            return self.value == other

        def __str__(self):
            return str(self.value)


>>> x = Bindable(2)
>>> if x == 3 or x.bind(3):
...     print(x)

And I wouldn't put that example anywhere in any docs either ;-)