私はこの単純なコードを試していますが、いまいましいブレークが機能しません...何が問題なのですか?
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であるため、エラーが発生します。だから私が欲しいのは、プロキシを試すためのループとして機能するためのものです。それが機能する場合は、スクリプトを続行し、スクリプトの終わりに戻って次のプロキシを試してください。次のプロキシが機能しない場合は、最初に戻って3番目のプロキシを試してください。
私はこのようなことを試みています
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'
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'
カスタム例外を使用して、それをキャッチできます。
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
ループから抜け出すだけなので、whileループを離れて、proxylist
を何度も繰り返し繰り返すことはありません。周囲のwhileループを省略してください。そもそも、なぜコードをwhile True
で囲んだのかわかりません。
breakは、最も内側のループ、つまりあなたの場合はfor
ループを壊しています。複数のループから抜け出すには、いくつかのオプションがあります。
return
を使用しますしかし、あなたの場合、実際には外側のwhile
ループはまったく必要ありません。削除するだけです。