在生成器函数中获取 StopIteration 错误
Getting StopIteration error in generator function
我正在使用一个生成器函数来 returns 10 'valid' 个数字。
check_id_valid()
函数 returns True
或 False
取决于数字是否有效。问题是我在仅生成一个 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
我正在使用一个生成器函数来 returns 10 'valid' 个数字。
check_id_valid()
函数 returns True
或 False
取决于数字是否有效。问题是我在仅生成一个 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