Автоматический перезапуск программы при возникновении ошибки

StackOverflow https://stackoverflow.com/questions/1611256

  •  05-07-2019
  •  | 
  •  

Вопрос

Программа похожа на эту & # 65306;

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

Мой вопрос: когда возникает ошибка (тайм-аут, сброс соединения по пиру и т. д.), как перезапустить urllib2.initialization () вместо существующей основной программы и снова перезапустить из HEADER CODE & # 65311;

Это было полезно?

Решение

Простой способ с ограничениями на попытки

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

Другие советы

Вы могли бы обернуть свой код в "пока не сделано" цикл:

#!/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

Как насчет просто обернуть его в другой цикл?

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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top