Ethan Furman wrote:
Please don't top-post.
Rob Richardson wrote:
-----Original Message-----
I missed the start of this discussion but there are two simpler ways:
def func(iterable):
for x in iterable:
print(x)
return
raise ValueError("... empty iterable")
Or using 3.x's next's optional second argument:
_nonext=object()
def func(iterable):
x = next(iter(iterable), _nonext)
if x is _nonext:
raise ValueError("... empty iterable")
print(x)
> Arnaud,
>
> Wouldn't your first suggestion exit after the first element in
> iterable?
No, it hit's return instead.
Doh -- Yes, it does.
It seems both solutions only get the first element, not all elements in
the iterator...
Maybe this instead:
def func(iterable):
for x in iterable:
break
else:
raise ValueError("... empty iterable")
for xx in chain((x, ), iterable):
process(xx)
Can't say as I care for this -- better to fix the unwanted nesting in
the tracebacks from raise.
~Ethan~
--
http://mail.python.org/mailman/listinfo/python-list