Terry Reedy > > On 1/3/2017 3:53 PM, Deborah Swanson wrote: > > >> I think you're expecting > >> > >> for file in rootobs > >> > >> to get the next yield for you from rootobs, but unless someone > >> corrects me, I don't think you can expect a 'for' statement to do > >> that. You need to have a 'next' statement inside your for > loop to get > >> the next yield from the generator. > > As I read this, out of context, it is wrong. It it very > unusual to call > next on the current iterator (here next(rootobs)), inside a for loop. > > > You probably want something like : > > > > for f in rootobs: > > file = next > > This is definitely wrong, as it makes 'find' an alias for the next() > function. > > > base = os.path.basename(file.name) > > and file.name will be an AttributeError. > > --- > If one wants to iterate through files and lines within files, which I > believe I saw in this thread, one should have a for loop > within a for loop. > > -- > Terry Jan Reedy
Yes, my first attempts were screwups. I didn't remember generator usage correctly, but I believe my last answer was correct: ...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) -- https://mail.python.org/mailman/listinfo/python-list