Generator woes

E

Erich

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
 
E

Erich

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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Staff online

Members online

Forum statistics

Threads
473,767
Messages
2,569,571
Members
45,045
Latest member
DRCM

Latest Threads

Top