diff options
Diffstat (limited to 'tests/basics')
-rw-r--r-- | tests/basics/iter1.py | 52 | ||||
-rw-r--r-- | tests/basics/iter2.py | 23 |
2 files changed, 75 insertions, 0 deletions
diff --git a/tests/basics/iter1.py b/tests/basics/iter1.py new file mode 100644 index 0000000000..c2ef86a635 --- /dev/null +++ b/tests/basics/iter1.py @@ -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) diff --git a/tests/basics/iter2.py b/tests/basics/iter2.py new file mode 100644 index 0000000000..763f59cb6f --- /dev/null +++ b/tests/basics/iter2.py @@ -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))) |