Damien George
11 years ago
23 changed files with 171 additions and 64 deletions
@ -0,0 +1,52 @@ |
|||
# test user defined iterators |
|||
|
|||
class MyStopIteration(StopIteration): |
|||
pass |
|||
|
|||
class myiter: |
|||
def __init__(self, i): |
|||
self.i = i |
|||
|
|||
def __iter__(self): |
|||
return self |
|||
|
|||
def __next__(self): |
|||
if self.i <= 0: |
|||
# stop in the usual way |
|||
raise StopIteration |
|||
elif self.i == 10: |
|||
# stop with an argument |
|||
raise StopIteration(42) |
|||
elif self.i == 20: |
|||
# raise a non-stop exception |
|||
raise TypeError |
|||
elif self.i == 30: |
|||
# raise a user-defined stop iteration |
|||
print('raising MyStopIteration') |
|||
raise MyStopIteration |
|||
else: |
|||
# return the next value |
|||
self.i -= 1 |
|||
return self.i |
|||
|
|||
for i in myiter(5): |
|||
print(i) |
|||
|
|||
for i in myiter(12): |
|||
print(i) |
|||
|
|||
try: |
|||
for i in myiter(22): |
|||
print(i) |
|||
except TypeError: |
|||
print('raised TypeError') |
|||
|
|||
try: |
|||
for i in myiter(5): |
|||
print(i) |
|||
raise StopIteration |
|||
except StopIteration: |
|||
print('raised StopIteration') |
|||
|
|||
for i in myiter(32): |
|||
print(i) |
@ -0,0 +1,23 @@ |
|||
# user defined iterator used in something other than a for loop |
|||
|
|||
class MyStopIteration(StopIteration): |
|||
pass |
|||
|
|||
class myiter: |
|||
def __init__(self, i): |
|||
self.i = i |
|||
|
|||
def __iter__(self): |
|||
return self |
|||
|
|||
def __next__(self): |
|||
if self.i == 0: |
|||
raise StopIteration |
|||
elif self.i == 1: |
|||
raise StopIteration(1) |
|||
elif self.i == 2: |
|||
raise MyStopIteration |
|||
|
|||
print(list(myiter(0))) |
|||
print(list(myiter(1))) |
|||
print(list(myiter(2))) |
Loading…
Reference in new issue