"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

Reply via email to