[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.python

Generator woes

Erich

3/13/2008 5:34:00 AM

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
1 Answer

Erich

3/13/2008 5:40:00 AM

0

On Mar 13, 12:33 am, Erich <sophac...@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