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


and/or always evaluate both operands


and/or evaluate their right operand only if absolutely necessary

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.

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.