Как выйти из попытки / кроме как через некоторое время?[Python] - PullRequest
7 голосов
/ 08 июля 2010

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

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'

Предполагается оставить время, когда соединение работает, и вернуться и попробовать другой прокси, если оно не

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

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

Я пытаюсь что-то вроде этого

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'

Ответы [ 4 ]

12 голосов
/ 08 июля 2010

Вы только что вышли из цикла 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'
4 голосов
/ 21 апреля 2016

Вы можете использовать пользовательское исключение и затем перехватить его:

exit_condition = False

try:

    <some code ...>

    if exit_conditon is True:
        raise UnboundLocalError('My exit condition was met. Leaving try block')

    <some code ...>

except UnboundLocalError, e:
    print 'Here I got out of try with message %s' % e.message
    pass

except Exception, e:
    print 'Here is my initial exception'

finally:
    print 'Here I do finally only if I want to'
3 голосов
/ 08 июля 2010

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

1 голос
/ 08 июля 2010

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

  1. Ввести условие
  2. Создайте подпрограмму и используйте return

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...