cascading python executions only if return code is 0

Roy Smith roy at panix.com
Sun Dec 22 15:05:34 EST 2013


In article <mailman.4504.1387740695.18130.python-list at python.org>,
 Mark Lawrence <breamoreboy at yahoo.co.uk> wrote:

> On 22/12/2013 19:17, Roy Smith wrote:
> > In article <mailman.4500.1387739297.18130.python-list at python.org>,
> >   Frank Cui <ycui at outlook.com> wrote:
> >
> >> hey guys,
> >> I have a requirement where I need to sequentially execute a bunch of
> >> executions, each execution has a return code. the followed executions 
> >> should
> >> only be executed if the return code is 0. is there a cleaner or more 
> >> pythonic
> >> way to do this other than the following ?
> >> if a() == 0:    if b() == 0:        c()
> >> Thanks for your input.
> >> frank 		 	   		
> >
> > Yup!  Just do:
> >
> > a() or b() or c()
> >
> > The "or" operation has what's known as "short-circuit" semantics.  That
> > means, if the first operand is true, it doesn't evaluate the second
> > operand.  Just make sure that a(), b(), and c() all return something
> > which is true if they succeed and false otherwise.
> >
> 
> Really? :)

I believe what Mark is so elegantly trying to say is, "Roy is a dufus 
and got that backwards".  You need to return something which is false to 
make the next one in the chain get executed.

$ cat or.py 
def a():
    print "a"
    return 0

def b():
    print "b"
    return 1

def c():
    print "c"
    return 0

a() or b() or c()


$ python or.py
a
b



More information about the Python-list mailing list