Generator woes

Erich sophacles at gmail.com
Thu Mar 13 06:40:03 CET 2008


On Mar 13, 12:33 am, Erich <sophac... at gmail.com> wrote:
> 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

Never mind its obviously a case of "I need to look foolish before I
can see the simple error". Im going to blush and hide now.

Erich



More information about the Python-list mailing list