Just a little two-cent opinion from the peanut gallery:
I've been following all the discussion on this go by, sometimes getting a bit heated at times, and just sitting nice and safe and secure in my little ivory tower, where I simply tell my students to not use 'break'. As a stodgy educator, I usually restrict them for these two reasons: 1) the loop condition should describe your expected loop conditions, and 2) the exception handling structure allows more control over where the exceptional circumstances will be handled (including which function) When it comes to searching an iterable collection, my ivory-tower view point tells me that the looping condition is based on whether the item is found, and is not a for loop traversing the entirety. To me, that is the 'one obvious way to do it' If I expect the item will be found, but fear that it will not, I can always compare a subscript to len(), or if that seems too hard, catch the StopIteration exception. I only recommend the for loop when the true expectation is to visit the entire collection (which can later be moderated with iter's sentinel parameter, or some of the filters in itertools) And I see that simply removing 'break' from my vocabulary, this whole 'else on a loop' issue completely dissolves. So thank you for, even unintentionally, helping me to feel good about living inside my ivory tower! Roger Christman Pennsylvania State University -- https://mail.python.org/mailman/listinfo/python-list