Erik wrote, on January 03, 2017 3:45 PM > > Hi, > > On 03/01/17 22:14, Deborah Swanson wrote: > > ...you have to create the generator object first and use it to call > > the next function. And I really don't think you can use a > generator as > > your range in a for loop. So I'd use a 'while True', and > break out of > > the loop when you hit the StopIteration exception: > > > > files = rootobs() > > > > while True: > > try: > > file = files.next() > > except StopIteration: > > break > > > > base = os.path.basename(file.name) > > . > > . > > . > > (etc) > > What you have done there is taken an understanding of the underlying > machinery that allows the 'for' loop to be syntactic sugar over any > iterable and spelled it out, instead of just using 'for'! Without all > that, your example is: > > for file in rootobs(): > base = os.path.basename(file.name) > . > . > . > (etc) > > [In fact, the machinery would also cope with the return value from > rootobs() being an iterable but not an iterator by using "files = > iter(rootobjs)"]. > > > > You seem to be reading up on how the stuff works under the > covers (i.e., > from the point of view of an implementer of a class or > library) and then > suggesting that that's what the *caller* of that class or > library needs > to do. They don't - for a caller, 'for x in seq:' is all they need to > know - the mechanics are handled by the interpreter coupled with the > dunder methods that the class may implement. > > > E.
Ok, I'm in complete agreement with everything you said up to the last paragraph, which I don't disagree with, I just don't see your point. If you've read my last few posts you'll have seen me acknowledging that normally a for loop is used, but a while and break on StopIteration is a method that's useful when the output of the generator is unknown. I haven't read through much documentation on generators, but I have taken a course from MIT, in which a Computer Science professor gave us several methods for working with generators, of which the while and break on StopIteration method is one. The original poster wanted to use a while, and seemed to be saying he didn't know how many files the generator he has would yield, so that was why I recommended the while loop. Normally I would use a for loop too. D. -- https://mail.python.org/mailman/listinfo/python-list