Search code examples
pythonwhile-loopconditional-statementsgeneratorbreak

How to solve StopIteration error in Python?


I have just read a bunch of posts on how to handle the StopIteration error in Python, I had trouble solving my particular example.I just want to print out from 1 to 20 with my code but it prints out error StopIteration. My code is:(I am a completely newbie here so please don't block me.)

def simpleGeneratorFun(n):

    while n<20:
        yield (n)
        n=n+1
    # return [1,2,3]

x = simpleGeneratorFun(1)
while x.__next__() <20:
    print(x.__next__())
    if x.__next__()==10:
        break

Solution

  • Any time you use x.__next__() it gets the next yielded number - you do not check every one yielded and 10 is skipped - so it continues to run after 20 and breaks.

    Fix:

    def simpleGeneratorFun(n):
    
        while n<20:
            yield (n)
            n=n+1
        # return [1,2,3]
    
    x = simpleGeneratorFun(1)
    while True:
        try:
            val = next(x) # x.__next__() is "private", see @Aran-Frey comment 
            print(val)
            if val == 10:  
                break
        except StopIteration as e:
            print(e)
            break