在生成器函数中获取 StopIteration 错误

Getting StopIteration error in generator function

我正在使用一个生成器函数来 returns 10 'valid' 个数字。

check_id_valid() 函数 returns TrueFalse 取决于数字是否有效。问题是我在仅生成一个 valid 数字后收到 StopIteration 错误。

check_id_valid()函数运行良好,我通过直接向其发送参数进行检查:print(check_id_valid(123456780)).

生成器函数:

def id_generator(Id_number):
    Id_number +=1
    valid_id = (check_id_valid(Id_number))
    while not valid_id:
        Id_number += 1
        valid_id = check_id_valid(Id_number)
        yield Id_number

def main():
    id_gen = id_generator(123456780)
    try:
        for item in range(10):
            print(next(id_gen))
    except (illigalDigits, illigalException) as e:
        print(e)

if __name__ == "__main__":
    main()

错误:

   print(next(id_gen))
StopIteration
>>>

您的生成器函数只有 yield 一次,因此需要进行更多更改。这是一个可运行的示例及其产生的输出:

# A little scaffolding to make code runnable.
class illigalDigits(Exception): pass
class illigalException(Exception): pass

def check_id_valid(id):
    return id  # Consider anything valid.
########

def id_generator(Id_number):
    while True:
        Id_number += 1
        valid_id = check_id_valid(Id_number)
        if valid_id:
            yield Id_number

def main():
    id_gen = id_generator(123456780)
    try:
        for _ in range(10):
            print(next(id_gen))
    except (illigalDigits, illigalException) as e:
        print(e)

if __name__ == "__main__":
    main()

输出:

123456781
123456782
123456783
123456784
123456785
123456786
123456787
123456788
123456789
123456790