__next__ and StopIteration

Ned Batchelder ned at nedbatchelder.com
Mon Feb 9 14:24:04 EST 2015


On 2/9/15 2:14 PM, Charles Hixson wrote:
> I'm trying to write a correct iteration over a doubly indexed container,
> and what I've got so far is:    def __next__ (self):
>          for row    in    range(self._rows):
>              for col in range(self._cols):
>                  if self._grid[row][col]:
>                      yield    self._grid[row][col]
>                  #end    if
>              #end    for col
>          #end    for row
>          raise    StopIteration
>
> What bothers me is that it doesn't look like it would continue to raise
> StopIteration if it were called again, which is what
> https://docs.python.org/3/library/stdtypes.html#iterator.__next__ says
> is correct.  How should this be fixed?

You are using yield, which means __next__ is a generator.  As such, you 
don't have to explicitly raise StopIteration at all.  Just remove that 
statement, and you should be fine.

Also, look into how you are posting, the code is nearly mangled. :(

-- 
Ned Batchelder, http://nedbatchelder.com




More information about the Python-list mailing list