Loops Control with Python

Paddy paddy3118 at netscape.net
Fri Oct 13 18:09:20 CEST 2006


Wijaya Edward wrote:
> Can we make loops control in Python?
> What I mean is that whether we can control
> which loops to exit/skip at the given scope.
>
> For example in Perl we can do something like:
>
> OUT:
> foreach my $s1 ( 0 ...100) {
>
>     IN:
>     foreach my $s2 (@array) {
>
>           if ($s1 == $s2) {
>              next OUT;
>           }
>           else {
>               last IN;
>           }
>
>      }
> }
>
> How can we implement that construct with Python?
>

Python does not use Labels. If you want to quit a single loop then look
up the Python break statement. If you want to exit deeply nested
execution then Python has exceptions. this maybe new to a Perl
programmer so please take time to understand Python exceptions.

There follows a function that you can call from an interactive session
to explore one type of use for exceptions  that is rather like your use
of Perl labels shown.

==========================
class Outer(Exception):
  pass
class Inner(Exception):
  pass

def skip_loops(y1 = -1, y2 = -1, y3 = -1):
  ''' Shows how to skip parts of nested loops in Python'''
  try:
    for x0 in range(3):
      try:
        for x1 in range(3):
          for x2 in range(3):
            if x2 == y2:
              raise Inner
            if x2 == y3:
              break
            print (x0,x1,x2)
          if x1 == y1:
            raise Outer
          print (x0,x1)
      except Inner:
        print "Raised exception Inner"
      print (x0,)
  except Outer:
    print "Raised exception Outer"

==========================

>>> skip_loops(y1=2)
(0, 0, 0)
(0, 0, 1)
(0, 0, 2)
(0, 0)
(0, 1, 0)
(0, 1, 1)
(0, 1, 2)
(0, 1)
(0, 2, 0)
(0, 2, 1)
(0, 2, 2)
Raised exception Outer
>>> skip_loops(y2=2)
(0, 0, 0)
(0, 0, 1)
Raised exception Inner
(0,)
(1, 0, 0)
(1, 0, 1)
Raised exception Inner
(1,)
(2, 0, 0)
(2, 0, 1)
Raised exception Inner
(2,)
>>> 


- Paddy.
P.S. Welcome to Python!




More information about the Python-list mailing list