2009-10-23 12 views
3

Le programme est comme ceci:programme automatiquement redémarrage en cas d'erreur se produit

HEADER CODE 
urllib2.initialization() 
try: 
    while True: 
     urllib2.read(somebytes) 
     urllib2.read(somebytes) 
     urllib2.read(somebytes) 
     ... 
except Exception, e: 
    print e 
FOOTER CODE 

Ma question est en cas d'erreur (délai d'attente, réinitialisation de la connexion par les pairs, etc.), comment redémarrer à partir urllib2.initialization() au lieu de programme principal existant et redémarrer à partir du CODE HEADER à nouveau?

Répondre

2

façon simple avec des tentatives restrictions

HEADER CODE 
attempts = 5 
for attempt in xrange(attempts): 
    urllib2.initialization() 
    try: 
     while True: 
      urllib2.read(somebytes) 
      urllib2.read(somebytes) 
      urllib2.read(somebytes) 
      ... 
    except Exception, e: 
     print e 
    else: 
     break 
FOOTER CODE 
4

Que diriez-vous de l'envelopper dans une autre boucle?

HEADER CODE 
restart = True 
while restart == True: 
    urllib2.initialization() 
    try: 
     while True: 
      restart = False 
      urllib2.read(somebytes) 
      urllib2.read(somebytes) 
      urllib2.read(somebytes) 
      ... 
    except Exception, e: 
     restart = True 
     print e 
FOOTER CODE 
5

Vous pouvez envelopper votre code dans un "sans faire" boucle:

#!/usr/bin/env python 

HEADER CODE 
done=False 
while not done: 
    try: 
     urllib2.initialization() 
     while True: 
      # I assume you have code to break out of this loop 
      urllib2.read(somebytes) 
      urllib2.read(somebytes) 
      urllib2.read(somebytes) 
      ... 
    except Exception, e: # Try to be more specific about the execeptions 
          # you wish to catch here 
     print e 
    else: 
    # This block is only executed if the try-block executes without 
    # raising an exception 
     done=True 
FOOTER CODE