On Wed, Dec 30, 2009 at 7:01 PM, Steven D'Aprano <st...@remove-this-cybersource.com.au> wrote: > > I don't see why. What's wrong with it? Unless you embed it in a call to > list, or similar, it will explicitly raise StopIteration as expected. > > >> I used to have that a lot in cases where not finding at least one valid >> foo is an actual fatal error. > > What's wrong with the obvious solution? > > if not any(foo for foo in foos if foo.bar): > raise ValueError('need at least one valid foo')
That would require 2 iterations through foos- once in the test, once for the assignment if successful. If foos takes a long time to iterate through, it might be faster to put a try-except around the original statement, catch the StopIteration, and raise a ValueError in its place. Which I agree is much better practice than letting the StopIteration signal the fatal error. -- http://mail.python.org/mailman/listinfo/python-list