Уточняющий ответ БренБарнса: break
к счастью не будет распространяться. break
- разорвать текущий цикл, и точка. Если вы хотите распространить событие, вам следует raise
создать исключение. Хотя создание исключения для разрыва цикла — это действительно уродливый способ разорвать циклы и хороший способ сломать ваш код.
ПОЦЕЛУЙ! Проще всего было бы проверить условие прямо в цикле
def my_condition(x):
return x == 4
for i in xrange(100):
if my_condition(i): break
print i
Если по какой-то причине вы хотите распространить исключение, вы используете его следующим образом
# exception example
for i in xrange(100):
if i == 4: raise Exception("Die!")
print i
Как уже упоминалось, это действительно уродливый дизайн. Представьте, что вы забыли перехватить это исключение, или изменили его тип с Exception
на MyBreakException
и забыли изменить его где-то в try/except
верхней части кода...
Пример генератора имеет свои достоинства, он делает ваш код более функциональным стилем (который я лично обожаю)
# generator example
def conditional_generator(n, condition):
for i in xrange(n):
if condition(i):
break
else:
yield i
for i in conditional_generator( 100, my_condition ):
print i
...который похож на takewhile
, упомянутый Эумиро
person
Jakub M.
schedule
21.12.2012