class Throw(object): pass
throw = Throw()
def next(iterator, default=throw):
"""next(iterator[, default])
Return the next item from the iterator. If default is given
and the iterator is exhausted, it is returned instead of
raising StopIteration.
"""
try:
iternext = iterator.next.__call__
except AttributeError:
raise TypeError("%s object is not an iterator" % type(iterator).__name__)
try:
return iternext()
except StopIteration:
if default is throw:
raise
return default
( throw = object()Works, too, but it creates better documents when checking, for example help(next). NoneIs not suitable, because you have to treat next(it)and next(it, None)different.)
Roger Pate
source
share