Skip to content

Instantly share code, notes, and snippets.

@glassresistor
Forked from seancribbs/test_context.py
Last active December 10, 2015 04:48
Show Gist options
  • Save glassresistor/4383710 to your computer and use it in GitHub Desktop.
Save glassresistor/4383710 to your computer and use it in GitHub Desktop.
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
# 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