break/continue - newbe

Ann Ann at nospam.invalid
Tue Dec 21 21:27:57 CET 2004


"Jeff Shannon" <jeff at ccvcorp.com> wrote in message
news:10sh1ct2oj519da at corp.supernews.com...
> Ann wrote:
>
> >I have trouble sometimes figuring out where
> >break and continue go to. Is there some easy
> >way to figure it out, or a tool?
> >
> >
>
> Break and continue always operate on the most-nested loop that's
> currently executing.  To show an example, let's add some line numbers to
> some code...
>
> 1) while spam:
> 2)     if foo(spam):
> 3)         continue
> 4)     for n in range(spam):
> 5)         if bar(n):
> 6)             break
> 7)         results.append(baz(spam, n))
> 8)     spam = spam - 1
>
> Now, when this loop runs, when foo(spam) evaluates as True we execute
> the continue at line 3.  At this time, we're running code that's at the
> loop-nesting level just inside 'while spam' (line 1), so line 1 is the
> loop statement that's affected by the continue on line 3.  If line 3 is
> triggered, then we skip lines 4-8 and go back to line 1.
>
> If line 3 is *not* triggered, then we enter a for loop at line 4.
> There's a break at line 6; if this gets triggered, then we look
> backwards to find the most-current (i.e. most nested) loop, which is now
> that for loop on line 4.  So we break out of that for loop (which
> comprises lines 4-7), and drop down to line 8.
>
> So, in general, the way to determine how break and continue will affect
> program flow is to look backwards (up) for the most recent loop
> statement; the break/continue will be inside that statement's dependent
> body.  Break will drop you down to the next line after the loop body,
> and continue will bring you back up to the top of the loop body and the
> start of the next loop iteration.
>
> Jeff Shannon
> Technician/Programmer
> Credit International
>
Thanks Jeff, that solves my problem. BTW: is there an easy way to
break/continue out more than one level?





More information about the Python-list mailing list