-
-
Save glassresistor/4383710 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
CONTEXT: start | |
USER: got resource | |
ITER: yielding 1 | |
USER: yielding 1 | |
GOT: 1 | |
ITER: yielding 2 | |
USER: yielding 2 | |
GOT: 2 | |
ITER: yielding 3 | |
USER: yielding 3 | |
GOT: 3 | |
ITER: yielding 4 | |
USER: yielding 4 | |
GOT: 4 | |
ITER: yielding 5 | |
USER: yielding 5 | |
GOT: 5 | |
ITER: yielding 6 | |
USER: yielding 6 | |
GOT: 6 | |
ITER: yielding 7 | |
USER: yielding 7 | |
GOT: 7 | |
ITER: yielding 8 | |
USER: yielding 8 | |
GOT: 8 | |
ITER: yielding 9 | |
USER: yielding 9 | |
GOT: 9 | |
ITER: yielding 10 | |
USER: yielding 10 | |
GOT: 10 | |
CONTEXT: done | |
--------------------------------------------------------------------------- | |
IndexError Traceback (most recent call last) | |
<ipython-input-21-6d377bd1ac3f> in <module>() | |
37 | |
38 | |
---> 39 for i in user(): | |
40 print "GOT: %s" % str(i) | |
<ipython-input-21-6d377bd1ac3f> in user() | |
31 with taker() as resource: | |
32 print "USER: got resource" | |
---> 33 for item in resource: | |
34 print "USER: yielding %s" % str(item) | |
35 yield item | |
<ipython-input-21-6d377bd1ac3f> in next(self) | |
13 | |
14 def next(self): | |
---> 15 item = self.list[0] | |
16 print "ITER: yielding %s" % str(item) | |
17 self.list = self.list[1:] | |
IndexError: list index out of range |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# A simple test that demonstrates my problem | |
from contextlib import contextmanager | |
class MyIterator(object): | |
def __init__(self): | |
self.list = [1,2,3,4,5,6,7,8,9,10] | |
def __iter__(self): | |
return self | |
def next(self): | |
item = self.list[0] | |
print "ITER: yielding %s" % str(item) | |
self.list = self.list[1:] | |
return item | |
@contextmanager | |
def taker(): | |
print "CONTEXT: start" | |
try: | |
yield MyIterator() | |
finally: | |
print "CONTEXT: done" | |
def user(): | |
with taker() as resource: | |
print "USER: got resource" | |
for item in resource: | |
print "USER: yielding %s" % str(item) | |
yield item | |
for i in user(): | |
print "GOT: %s" % str(i) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment