Generator woes

Erich sophacles at gmail.com
Thu Mar 13 01:33:59 EDT 2008


Hi all,

I am trying to get the following generator to work to these goals:

1. When it recieves an exception (via a throw()) it yeilds the value
of handler.remaining. Otherwise it yeilds None.
2. Send adds data to the generator.

Goal 2 is working great. Goal 1 on the other hand, is not working. The
result of a throw is always None.

Any reasons why this does not work as I expect? If not, what is wrong?

Code:
def make_handler():
    def handler():
        eol = '\r\n'

        handler.remaining = 1
        response = ''
        data = ''

        while not response.endswith(eol):
            trv = None
            try:
                ndata = (yield trv)
                if ndata: response += ndata
                trv = None
            except:
                trv = handler.remaining
        response = response.strip()
        yield response * 2
    res = handler()
    res.next()
    return res

x = make_handler()
y = x.send('a')
print 'y (should be None):',y
y = x.send('b')
print 'y (should be None):',y
y = x.throw(Exception)
print 'y (should be 1):',y
y = x.send('c\r\n')
print 'y (should be abcabc):',y

Output:
y (should be None): None
y (should be None): None
y (should be 1): None
y (should be abcabc): abcabc

Thanks,
Erich



More information about the Python-list mailing list