Expressions with operators
or always evaluate both of their operands.
and/or always evaluate both operands
and/or evaluate their right operand only if absolutely necessary
CorrectionHere 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.
ValueHow 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
'NoneType' object has no attribute
'value') if it always evaluated its right-hand operand, even when
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
z is not evaluated.