Как выйти из try / кроме как через некоторое время? [Питон]

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

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 ответов


вы просто вырваться из for loop -- not 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'

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


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

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'

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

  1. ввести условие
  2. создать суб и использовать return

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