"Jordan Rastrick" <[EMAIL PROTECTED]> wrote in message news:[EMAIL PROTECTED]
> def combineIntoRecord(): # This is an acceptor function > optionalline = None # We may not get given a value for this line > accept firstline > accept secondline > if condition(secondline): > accept optionalline > accept lastline > r = createRecord(firstline, secondline, lastline, optionalline) > return r > recordlist = [] > for line in lines: > recordlist.append(combineIntoRecord(line)) How about doing it this way? class Acceptor: def __init__(self, gen): self.gen = gen def next(self): firstline = self.gen.next() secondline = self.gen.next() if condition(secondline): optionalline = self.gen.next() accept lastline r = createRecord(firstline, secondline, lastline, optinalline) return r This is just a generator done longhand. If anything in Acceptor.next raises StopIteration, so will Acceptor.next itself. Which means that you can now write this: for r in Acceptor(line): recordlist.append(r) or, for that matter, recordlist = list(Acceptor(line)) Incidentally, I did not try to fix the bug in your code that if condition(secondline) is false, optionalline never gets set so the program will crash :-) -- http://mail.python.org/mailman/listinfo/python-list