【发布时间】:2021-01-07 07:27:22
【问题描述】:
我想为生成器编写一个包装器,它检查生成器是否产生任何东西,并且(例如)如果没有则引发异常。
我会写:
def my_wrapper(input):
if input is None:
return
found = False
for elem in my_yielding_function(input):
found = True
yield elem
if not found:
raise MyException("Empty Generator")
有没有更 Pythonic 的方式来做到这一点?
有一个非常similar question,但它已经有 10 多年的历史了——也许事情已经改变了?
上下文:
很难解释 - 我正在使用一个给定的 API 函数,它可能不会产生任何结果,但在这种情况下 my 函数与空输入有区别。
【问题讨论】:
-
您想保留初始生成器(即不使用它)吗?您能否提供一些必要的上下文?
-
如果可能的话,是的。但如果有办法避免这个丑陋的
found标志,我也会很高兴。在我看来for.. else应该是为此,但也许还有其他语法结构? -
链接问题中的the second answer 有什么问题?似乎以一种非常简短的 Pythonic 方式完全符合您的要求
-
我的代码示例不够清晰 -
my_generator不是生成器,而是返回生成器的函数。我已经更改了相应的部分。 -
嗯,我已经在我的问题中添加了这个问题 :) 答案是否定的 - 这就是我问新问题的原因
标签: python python-3.x generator yield