【问题标题】:python raise exception before yieldpython在yield之前引发异常
【发布时间】:2020-03-03 07:52:29
【问题描述】:

我正在尝试创建一个产生值的函数。在做任何事情之前,我想确保函数输入是有效的。下面的代码在执行后创建生成器。它仅在 next 之后引发异常。在next之前抛出异常的函数是否有优雅的结构?

def foo(value):
    if validate(value):
        raise ValueError
    yield 1

【问题讨论】:

  • 向我们展示你的validate函数
  • validate 函数只是一个返回 True 或 False 的任意函数。

标签: python generator


【解决方案1】:

你不能在使用next之前检查value,这就是使用gnerators的全部意义,来自docs

每个yield都会暂时暂停处理,记住位置 执行状态(包括局部变量和挂起 尝试语句)。当生成器迭代器恢复时,它会拾取 它停止的地方(与每次都重新开始的功能相反 调用)。

你可以做的是在使用生成器之前检查值

【讨论】:

  • 所以我需要将 foo 拆分为至少两个函数?如果有效,调用产生的包装函数?
  • 类似的东西,如果您愿意,您也可以在问题中发布有关您的用例的更多详细信息
猜你喜欢
  • 2014-06-26
  • 1970-01-01
  • 2021-11-14
  • 1970-01-01
  • 2019-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-15
相关资源
最近更新 更多