I’ve got a function that often throws an exception (SSH over 3g).
I’d like to keep trying to run function() every 10 seconds until it succeeds (doesn’t throw an exception).
As I see it, there are two options:
Nesting:
def nestwrapper():
try:
output = function()
except SSHException as e:
# Try again
sleep(10)
return nestwrapper()
return output
Looping: (updated)
It’s been pointed out that the previous looping code was pretty unnecessary.
def loopwrapper():
while True:
try:
return function()
except SSHException as e:
sleep(10)
Is there a preferred method of doing this?
Is there an issue with nesting and the exception stack?
I would find a loop to be cleaner and more efficient here. If this is an automation job, the recursive method could hit python recursion limit (default is 1000 iirc, can check with
sys.getrecursionlimit()).Don’t use
status is Falsefor your expression, because this is an identity comparison. Usewhile not status.I would probably implement it slightly differently too, because I don’t see any need for the two different functions here: