Actually, ignore my above comment. This syntax is entirely correct, insofar as `None` will still short-circuit `and` before the second evaluation. 

I'm not entirely sure if this is a violation of the principle of least astonishment, however. According to http://docs.python.org/2/reference/datamodel.html:

/By convention, False and True are returned for a successful comparison. However, these methods can return any value, so if the comparison operator is used in a Boolean context (e.g., in the condition of an if statement), Python will call bool() on the value to determine if the result is true or false./

`bool(None)` does, of course, return `False`.

I suppose I'd prefer to avoid a pattern of `True`, `False`, `None` here. I'd much rather an exception were raised when `other` is `None`.