Reiniciando un programa después de la excepción

Tengo un programa que consulta una API cada pocos segundos. Cada respuesta activa algunas funciones que, a su vez, realizan algunas llamadas a sitios web y otras, llamadas en las que no quiero confiar ciegamente para tener éxito. Si detecto una excepción enfoo(), por ejemplo, o incluso en una función quefoo() llamadas, ¿es posible reiniciar el programa por completo en el bloque excepto? Esencialmente, quiero llamarqueryRepeatedly() tras una excepción en una de sus subfunciones, sin mantener la llamada anterior en la pila.

Por supuesto, podría devolver los valores de marcador y resolver esto de otra manera, pero el programa está estructurado de tal manera que el enfoque anterior parece mucho más simple y limpio.

# Sample "main" function that I want to call
def queryRepeatedly():
    while True:
        foo()
        bar()
        baz()
        time.sleep(15)

def foo():
    # do something
    try:
        foo2() # makes a urllib2 call that I don't trust
    except:
        #restart queryRepeatedly

queryRepeatedly()

Cualquier sugerencia es apreciada! Gracias.

Respuestas a la pregunta(3)

Su respuesta a la pregunta