missing 'xor' Boolean operator

Steven D'Aprano steve at REMOVE-THIS-cybersource.com.au
Fri Jul 17 15:42:44 CEST 2009

On Thu, 16 Jul 2009 15:53:45 +0200, Jean-Michel Pichavant wrote:

> Python has extended the algebra definition of "or" and "and" top any
> type, but it is so unintuitive (I'm no LISP programmer).

I disagree. The Something/Nothing dichotomy is so intuitive to me that I 
would hate to go back to a language that only accepted booleans as 
arguments to `if`.

> I think than 
> using the short-circuiting mechanism of bool operators along with the 
> python tricks is just error prone and may result in bug difficult to 
> spot, unless you are very aware of all python boolean mechanisms.

In other words, if you don't know how Python behaves, you will make 

Of course you will. That applies to *anything* -- if you don't know how 
it works, you will make mistakes.

Given three result codes, where 0 means "no error" and an arbitrary non-
zero integer means some error, it is simple and easy to write:

failed = result_1 or result_2 or result_3

The equivalent:

failed = (result_1 != 0) or (result_2 != 0) or (result_3 != 0)
# or if you prefer:
succeeded = (result_1 == 0) and (result_2 == 0) and (result_3 == 0)

are longer and more difficult to read and easier to get wrong. Even worse 
are tricks like this:

failed = (result_1 + result_2 + result_3) != 0

This obscures the fact that the result codes are flags and makes it seem 
like (flag + flag) is meaningful.


More information about the Python-list mailing list