いくつかのネストされたループから抜け出す方法はいくつかあります
彼らです:
1) ブレークコンティニューを使用する
for x in xrange(10):
for y in xrange(10):
print x*y
if x*y > 50:
break
else:
continue # only executed if break was not used
break
2) return を使用する
def foo():
for x in range(10):
for y in range(10):
print x*y
if x*y > 50:
return
foo()
3) 特別な例外を使用するには
class BreakIt(Exception): pass
try:
for x in range(10):
for y in range(10):
print x*y
if x*y > 50:
raise BreakIt
except BreakIt:
pass
何か別の方法があるのではないかという考えもありました。これは、外側のループに直接送信される StopIteration 例外を使用することによるものです。私はこのコードを書きました
it = iter(range(10))
for i in it:
for j in range(10):
if i*j == 20:
raise StopIteration
残念ながら、StopIteration はどの for ループにもキャッチされず、そのコードは醜い Traceback を生成しました。iterator itの内部から StopIteration が送信されなかったことが原因だと思います。(これは私の推測であり、よくわかりません)。
StopIteration を外側のループに送信する方法はありますか?
ありがとう!