Как выйти из попытки/кроме внутри некоторое время? [Python]

Я пробую этот простой код, но проклятое повреждение не работает... что не так?

while True:
    for proxy in proxylist:
        try:
            h = urllib.urlopen(website, proxies = {'http': proxy}).readlines()
            print 'worked %s' % proxy
            break
        except:
            print 'error %s' % proxy
print 'done'

Это, как предполагается, уезжает в то время как, когда работа соединения, и возвращаются и пробуют другой прокси, если это не сделало

хорошо, вот то, что я делаю

Я пытаюсь проверить веб-сайт и если бы он изменился, то он должен убежать, в то время как продолжить к остальной части сценария, но когда прокси не соединяется, я получаю ошибку от переменной, поскольку это является пустым, поэтому что я хочу, это для работы как цикл для попытки прокси, и если он будет работать, продолжать сценарий и конец сценария, возвратитесь и попробуйте следующий прокси, и если следующее не будет работать, то он вернется к началу попробовать третий прокси и так далее....

Я пробую что-то вроде этого

while True:
    for proxy in proxylist:
        try:
            h = urllib.urlopen(website, proxies = {'http': proxy})
        except:
            print 'error'
        check_content = h.readlines()
        h.close()
        if check_before != '' and check_before != check_content:
            break
        check_before = check_content
        print 'everything the same'
print 'changed'
7
задан Bruno 'Shady' 7 July 2010 в 22:25
поделиться

3 ответа

Вы просто выходите из цикла for , а не из цикла while :

running = True
while running:
    for proxy in proxylist:
        try:
            h = urllib.urlopen(website, proxies = {'http': proxy}).readlines()
            print 'worked %s' % proxy
            running = False
        except:
            print 'error %s' % proxy
print 'done'
12
ответ дан 6 December 2019 в 08:41
поделиться

Вы выходите только из цикла for , поэтому вы никогда не покидаете цикл while и не перезапускаете итерацию по proxylist снова и снова. Просто опустите окружающий цикл while, я вообще-то не понимаю, почему вы в первую очередь заключили код в , а True .

3
ответ дан 6 December 2019 в 08:41
поделиться

break разрывает самый внутренний цикл, которым в вашем случае является цикл for. Чтобы выйти из более чем одного цикла, у вас есть несколько вариантов:

  1. Ввести условие
  2. Создать подцикл и использовать return

но в вашем случае вам вообще не нужен внешний цикл while. Просто удалите его.

2
ответ дан 6 December 2019 в 08:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: