class LOLERROR(Exception):
	pass

def retry(tries, delay=3, backoff=2):
	def _retry(f):
		def f_retry(*args, **kwargs):
			last_exception = None
			for attempt in range(1, tries + 1):
				try:
					ret = f(*args, **kwargs)
				except Exception as e:
					last_exception = e
					if attempt < tries:

						print "sleep:", delay * (backoff ** (attempt - 1))

					continue
				# success
				return ret
			# ran through our tries, bail out
			raise last_exception 
		return f_retry
	return _retry
			

#@retry(5)	
def foo(a):
	print a
	raise LOLERROR

retry(5)(foo)("test")