# Calls to PyIter_Next, or direct calls to tp_iternext, on an object # which might no longer be an iterable because its 'next' method was # removed. These are all variants of Issue3720. """ Run this script with an argument between 1 and to test for different crashes. """ N = 8 import sys class Foo(object): def __iter__(self): return self def next(self): del Foo.next return (1, 2) def case1(): list(enumerate(Foo())) def case2(): x, y = Foo() def case3(): filter(None, Foo()) def case4(): map(None, Foo(), Foo()) def case5(): max(Foo()) def case6(): sum(Foo(), ()) def case7(): dict(Foo()) def case8(): sys.stdout.writelines(Foo()) # etc... if __name__ == '__main__': if len(sys.argv) < 2: print(__doc__.replace('', str(N))) else: n = int(sys.argv[1]) func = globals()['case%d' % n] func()