On Sat, 6 Mar 2010 04:13:49 pm Gil Cosson wrote: > I have some code to perform an exponential backoff. I am interacting > with a few different web services. Checking for a specific Exception > and then re-invoking the failed call after waiting a bit. I don't > want to code the backoff in ten different places. Really miss the C > pre-processor. > > I am tempted to try something like the following, but I understand > that eval should be a last resort. > > Any pythonic best practice for this situation?:
Functions are first-class objects that can be passed around as data. Use them. def check_some_website(url, x): # whatever def exponential_backoff(function, args, exception, numretries): # Backoff 1 second, 2 seconds, 4 seconds, 8, 16, ... t = 1 for i in xrange(numretries): try: return function(*args) except exception: time.sleep(t) t *= 2 raise exception("no connection after %d attempts" % numretries) result = exponential_backoff(check_some_website, ("http://example.com", 42), HTTPError, 8) Any time you think you need eval, you almost certainly don't. -- Steven D'Aprano _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor