Отправка StopIteration в цикл for извне итератора

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

Это:

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) использовать 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. Я думаю, это потому, что StopIteration не был отправлен изнутри итератора it . (это мое предположение, я не уверен в этом.)

Есть ли способ отправить StopIteration во внешний цикл?

Спасибо!

7
задан twasbrillig 23 November 2014 в 10:34
поделиться