Ponowne uruchamianie programu po wyjątku
Mam program, który wysyła zapytania do API co kilka sekund. Każda odpowiedź uruchamia kilka funkcji, które same wywołują pewne połączenia ze stronami internetowymi i takie - połączenia, których nie chcę ślepo ufać, aby odnieść sukces. Jeśli złapię wyjątek wfoo()
na przykład, a nawet w funkcji, którafoo()
wywołań, czy można ponownie uruchomić program całkowicie w bloku wyjątkiem? Zasadniczo chcę zadzwonićqueryRepeatedly()
na wyjątek w jednej z jego podfunkcji, bez utrzymywania poprzedniego wywołania na stosie.
Oczywiście, mogłem zwrócić wartości znaczników i rozwiązać to w inny sposób, ale program jest skonstruowany w taki sposób, że powyższe podejście wydaje się znacznie prostsze i czystsze.
# 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()
Wszelkie sugestie są mile widziane! Dzięki.