вместо

несколько способов вырваться из нескольких вложенных циклов

Они есть:

1) использовать break-continue

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) использовать возврат

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

К сожалению, стоп-цикл не был перехвачен циклом for, и этот код вызвал ужасную трассировку. Я думаю, это потому, что StopItered не был отправлен изнутри итератораЭто, (это мое предположение, я не уверен в этом).

Есть ли способ, которым я могу отправить StopIteration во внешний цикл?

Спасибо!

Ответы на вопрос(4)

Ваш ответ на вопрос