Path: csiph.com!usenet.pasdenom.info!weretis.net!feeder4.news.weretis.net!ecngs!feeder2.ecngs.de!newsfeed.freenet.ag!news2.euro.net!newsgate.cistron.nl!newsgate.news.xs4all.nl!post.news.xs4all.nl!not-for-mail Return-Path: X-Original-To: python-list@python.org Delivered-To: python-list@mail.python.org X-Spam-Status: OK 0.015 X-Spam-Evidence: '*H*': 0.97; '*S*': 0.00; '*not*': 0.07; 'lines,': 0.07; 'iterate': 0.09; 'propagate': 0.09; 'raises': 0.09; '*other*': 0.16; '23,': 0.16; 'caveat': 0.16; 'happily': 0.16; 'ignoring': 0.16; 'loop.': 0.16; 'looping': 0.16; 'loops': 0.16; 'pairs': 0.16; 'pairs,': 0.16; 'wrote:': 0.18; 'stack': 0.19; 'instance,': 0.24; 'file.': 0.24; 'this:': 0.26; 'header:In-Reply- To:1': 0.27; 'chris': 0.29; 'am,': 0.29; 'reaches': 0.30; 'message-id:@mail.gmail.com': 0.30; 'code': 0.31; 'catching': 0.31; 'exceptions': 0.31; 'raised': 0.31; 'terminate': 0.31; 'run': 0.32; '(i.e.': 0.33; 'there,': 0.34; "i'd": 0.34; 'could': 0.34; 'problem': 0.35; 'received:209.85': 0.35; 'received:209.85.220': 0.35; 'definition': 0.35; 'received:google.com': 0.35; 'there': 0.35; 'returning': 0.36; 'method': 0.36; 'possible': 0.36; 'subject:?': 0.36; 'received:209': 0.37; 'being': 0.38; 'to:addr:python-list': 0.38; 'to:addr:python.org': 0.39; 'called': 0.40; 'even': 0.60; 'catch': 0.60; 'break': 0.61; 'mentioned': 0.61; 'simply': 0.61; 'simple': 0.61; '(that': 0.65; 'unusual': 0.74; '"simply': 0.84; '2013': 0.98 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=x-received:mime-version:in-reply-to:references:from:date:message-id :subject:to:content-type; bh=1mrv6LDCFV/inSYS4Zuo7LcGxgrTZK2rJ8LQPPjpgDM=; b=G/FcfKMlPLHUCGBnvoagW2BglN4euwJXGwFm1G6fjPuNYQ6sQF8v1TVrYGOCnZYri5 bt3Iczbx4kd+uiaBqQZ0SKnCcXTzT1Bx0z7OR2JoQtiEM+gsk807z/qtK+WfIk9YIQ9v yKXQB2wIKWWaOhKYmcCdexblb65ujW/UGbVyaLHfAEq5lJVB7c3QvQdXdRgHRJNYUrCg UgUdQKksWA6Agv2b0exMEadSBv4JdCXizyssoblVgnxQaOpmuWD+cyEpwZL88DvLsLW/ 5wlYTIciitI1drZDZYVvVa0fnFjHzNsBpYQxTbn1mchojsrD4YXtGXwzLszk+//+IN0F RrEQ== X-Received: by 10.68.228.134 with SMTP id si6mr42930555pbc.24.1366734687695; Tue, 23 Apr 2013 09:31:27 -0700 (PDT) MIME-Version: 1.0 In-Reply-To: References: From: Ian Kelly Date: Tue, 23 Apr 2013 10:30:47 -0600 Subject: Re: Nested iteration? To: Python Content-Type: text/plain; charset=ISO-8859-1 X-BeenThere: python-list@python.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: General discussion list for the Python programming language List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Newsgroups: comp.lang.python Message-ID: Lines: 24 NNTP-Posting-Host: 2001:888:2000:d::a6 X-Trace: 1366735164 news.xs4all.nl 2189 [2001:888:2000:d::a6]:44935 X-Complaints-To: abuse@xs4all.nl Xref: csiph.com comp.lang.python:44199 On Tue, Apr 23, 2013 at 10:21 AM, Chris Angelico wrote: > The definition of the for loop is sufficiently simple that this is > safe, with the caveat already mentioned (that __iter__ is just > returning self). And calling next() inside the loop will simply > terminate the loop if there's nothing there, so I'd not have a problem > with code like that - for instance, if I wanted to iterate over pairs > of lines, I'd happily do this: > > for line1 in f: > line2=next(f) > print(line2) > print(line1) > > That'll happily swap pairs, ignoring any stray line at the end of the > file. Why bother catching StopIteration just to break? The next() there will *not* "simply terminate the loop" if it raises a StopIteration; for loops do not catch StopIteration exceptions that are raised from the body of the loop. The StopIteration will continue to propagate until it is caught or it reaches the sys.excepthook. In unusual circumstances, it is even possible that it could cause some *other* loop higher in the stack to break (i.e. if the current code is being run as a result of the next() method being called by the looping construct).