Вот способ разбить несколько вложенных блоков с помощью диспетчера контекста:
import contextlib
@contextlib.contextmanager
def escapable():
class Escape(RuntimeError): pass
class Unblock(object):
def escape(self):
raise Escape()
try:
yield Unblock()
except Escape:
pass
Вы можете использовать его, чтобы разбить несколько циклов:
with escapable() as a:
for i in xrange(30):
for j in xrange(30):
if i * j > 6:
a.escape()
И вы можете даже вкладывать их:
with escapable() as a:
for i in xrange(30):
with escapable() as b:
for j in xrange(30):
if i * j == 12:
b.escape() # Break partway out
if i * j == 40:
a.escape() # Break all the way out