NoShortCircuit

Misconception:

Expressions with operators and and or always evaluate both of their operands.

Incorrect

and/or always evaluate both operands

Correct

and/or evaluate their right operand only if absolutely necessary

Correction
Here is what's right.

These two operators are short-circuit operators, which means they first evaluate the left operand and then only evaluate the right operand if that’s absolutely necessary.

Value
How can you build on this misconception?

Use in a common idiom

This misconception provides an opportunity to discuss the following idiom, which would cause an AttributeError ('NoneType' object has no attribute 'value') if it always evaluated its right-hand operand, even when Node is None:

if node is not None and node.value < v:
    ...

Short circuiting also applies to chained comparisons. For example, if we have a comparison x < y <= z and x < y is False then z is not evaluated.

Stay up-to-date

Follow us on  twitter to hear about new misconceptions.