如何解决在生成器函数中遇到StopIteration错误
我正在使用一个生成器函数来依次返回10个' valid '数字。
check_id_valid()
函数根据数字是否有效返回True
或False
。问题是仅产生一个有效编号后,我遇到了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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。