Else statement executing when it shouldnt

Mitya Sirenef msirenef at lightbird.net
Mon Jan 21 07:09:21 CET 2013

On 01/20/2013 11:59 PM, eli m wrote:
 >> Your else is lined up with while, not with if.
 >> -m
 >> --
 >> Lark's Tongue Guide to Python: http://lightbird.net/larks/
 >> When a friend succeeds, I die a little. Gore Vidal
 > Its lined up. It got messed up when i copied the code into the post.

I would recommend using while True: and break vs. while var: as you
have. In most cases while True: works better, especially in case of long
and/or nested 'while' loops, as you have.

'while True' blocks have two advantages: 1. you can break the loop at
any location and 2. when looking at the code, you can tell on which
condition it breaks by looking at the break line.

Even more importantly, break it up into a few functions. The code as you
have it is too hard to work with and to debug.

It's hard to tell what your 'else' is lined up to, or whether some other
lines are mis-aligned, as well.

Generally, try to avoid making a loop if it's 20+ lines; if there are
nested loops, it makes things even worse. Compare:

if something:
     while True:
      if not process(): break

def process():
  [... 20 lines that loop ...]
  [ return None to break the loop ]

Now this is really clear, because just by looking at the first three
lines, I know what the loop is supposed to do (process something), that
it continues looping until it returns a false value; when looking at
the function body I don't need to care which block it aligns to, I
already know the entire function body is in the while loop.

HTH, -m

Lark's Tongue Guide to Python: http://lightbird.net/larks/

The irrational in the human has something about it altogether repulsive and
terrible, as we see in the maniac, the miser, the drunkard or the ape.
George Santayana

More information about the Python-list mailing list