Good python equivalent to C goto

Paul McGuire ptmcg at austin.rr.com
Mon Aug 18 10:59:07 EDT 2008


On Aug 17, 1:09 pm, Matthew Fitzgibbons <eles... at nienna.org> wrote:
> Kurien Mathew wrote:
> > Hello,
>
> > Any suggestions on a good python equivalent for the following C code:
>
> > while (loopCondition)
> > {
> >     if (condition1)
> >         goto next;
> >     if (condition2)
> >         goto next;
> >     if (condition3)
> >         goto next;
> >     stmt1;
> >     stmt2;
> > next:
> >     stmt3;
> >     stmt4;
> >  }
>
> > Thanks
> > Kurien
> > --
> >http://mail.python.org/mailman/listinfo/python-list
>
> I would not be too happy if I saw C code like that in my repository.
> This is equivalent:
>
> while (loopCondition) {
>      if (!(condition1 || condition2 || condition3)) {
>          stmt1;
>          stmt2;
>      }
>      stmt3;
>      stmt4;
>
> }
>
> In Python:
>
> while (loopCondition):
>      if not (condition1 or condition2 or condition3):
>          stmt1
>          stmt2
>      stmt3
>      stmt4
>
> If stmt3 and stmt4 are error cleanup code, I would use try/finally.
>
> while loopCondition:
>      try:
>          if condition1:
>              raise Error1()
>          if condition2:
>              raise Error2()
>          if condition3:
>              raise Error3()
>          stmt1
>          stmt2
>      finally:
>          stmt3
>          stmt4
>
> This will also bail out of the loop on and exception and the exception
> will get to the next level. If you don't want that to happen, put an
> appropriate except block before the finally.
>
> -Matt- Hide quoted text -
>
> - Show quoted text -

Close, but there is no reason for the conditions to raise anything,
they can just use the continue statement:

i = 20
while i > 0:
    try:
        if i % 2:
            continue
        if i % 3:
            continue
        print i, "is even and a multiple of 3"
    finally:
        i -= 1

Prints:
18 is even and a multiple of 3
12 is even and a multiple of 3
6 is even and a multiple of 3

I think this is closest to the OP's stated requirements.

-- Paul



More information about the Python-list mailing list