【发布时间】:2020-08-17 10:32:44
【问题描述】:
我必须创建 Python 函数生成器,它应该返回正数的所有除数。 如果没有除数,left 函数应该返回 None。 这样做:
def divisor(num):
try:
final = (x for x in range(1, num + 1) if num / x == int(num / x))
except StopIteration:
return None
else:
return final
得到这样的结果:
three = divisor(3)
next(three) => 1
next(three) => 3
但是当我再调用一次函数时,得到StopIteration错误:
next(three) =>
Traceback (most recent call last):
...
StopIteration
为什么不处理 StopIteration?我究竟做错了什么?如何解决?
【问题讨论】:
-
您不应该使用
yield而不是return吗? -
您的问题强调“生成器函数”,但您没有生成器函数:您有一个使用
return的普通函数。生成器函数必须使用yield。但是,您返回的东西 (final) 是一个生成器表达式。这是你的意图吗? -
我认为生成器表达式可以让我将函数用作生成器函数。我错了吗?
标签: python exception generator