Reiniciando um programa após exceção

Eu tenho um programa que consulta uma API a cada poucos segundos. Cada resposta aciona algumas funções que, por sua vez, fazem algumas chamadas para sites e tais - chamadas que não quero confiar cegamente para ter sucesso. Se eu pegar uma exceção emfoo(), por exemplo, ou mesmo em uma função quefoo() chamadas, é possível reiniciar o programa inteiramente no bloco exceto? Essencialmente, eu quero ligarqueryRepeatedly() em uma exceção em uma de suas subfunções, sem manter a chamada anterior na pilha.

É claro que eu poderia retornar os valores dos marcadores e resolver isso de outra maneira, mas o programa é estruturado de tal maneira que a abordagem acima parece muito mais simples e mais limpa.

# 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()

Qualquer sugestão é apreciada! Obrigado.