import functools
import random
def retry(func):
@functools.wraps(func)
def wrapper(*args, **kwargs):
while True:
try:
return func(*args, **kwargs)
except Exception:
pass
return wrapper
@retry
def do_something_unreliable():
if random.randint(0, 10) > 1:
raise IOError("Broken sauce, everything is hosed!!!111one")
else:
return "Awesome sauce!"
print(do_something_unreliable())
aW1wb3J0IGZ1bmN0b29scwppbXBvcnQgcmFuZG9tCgoKZGVmIHJldHJ5KGZ1bmMpOgogICAgQGZ1bmN0b29scy53cmFwcyhmdW5jKQogICAgZGVmIHdyYXBwZXIoKmFyZ3MsICoqa3dhcmdzKToKICAgICAgICB3aGlsZSBUcnVlOgogICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICByZXR1cm4gZnVuYygqYXJncywgKiprd2FyZ3MpCiAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgICAgICAgICBwYXNzCiAgICByZXR1cm4gd3JhcHBlcgoKCkByZXRyeQpkZWYgZG9fc29tZXRoaW5nX3VucmVsaWFibGUoKToKICAgIGlmIHJhbmRvbS5yYW5kaW50KDAsIDEwKSA+IDE6CiAgICAgICAgcmFpc2UgSU9FcnJvcigiQnJva2VuIHNhdWNlLCBldmVyeXRoaW5nIGlzIGhvc2VkISEhMTExb25lIikKICAgIGVsc2U6CiAgICAgICAgcmV0dXJuICJBd2Vzb21lIHNhdWNlISIKCgpwcmludChkb19zb21ldGhpbmdfdW5yZWxpYWJsZSgpKQo=