Как выйти из 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
цикл в вашем случае. Чтобы вырваться из более чем одного цикла, у вас есть несколько вариантов:
- ввести условие
- создать суб и использовать
return
но в вашем случае вам не нужен внешний while
петля вообще. Просто уберите его.