On Nov 19, 10:21 am, Gilles Ganault <[EMAIL PROTECTED]> wrote:

> On 19 Nov 2008 14:37:06 +0000 (GMT), Sion Arrowsmith
>
> <[EMAIL PROTECTED]> wrote:
> >Note very carefully that the "else" goes with the "for" and not the "if".
>
> Thanks guys.

And if you end up doing this for several different functions, you can
factor it out with the following decorator:

class MaxRetriesExceededError(Exception):
    pass

def retry(n):
    def decorator(f):
        def wrapper(*args, **kwds):
            for i in xrange(n):
                r = f(*args, **kwds)
                if r: return r
            raise MaxRetriesExceededError
        return wrapper
    return decorator

If the number of retries is fixed and known at "compile" time, you can
use the standard decorator syntax:

@retry(5)
def CheckIP():
   ...

If not, just decorate it explicitly at runtime:

def CheckIP():
  ...

n = int(raw_input('Give number of retries:'))
CheckIP = retry(n)(CheckIP)


HTH,
George
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to