我有一个生成器,它将一组数值传递给一个方法并产生结果。被调用的方法可能会返回异常。当发生这种情况时,我希望异常能够传递到调用生成器的代码中处理异常,然后继续循环生成器。
为了说明这一点,以下是一个示例生成器,它将产生
以下是上述代码的输出结果。
为了说明这一点,以下是一个示例生成器,它将产生
1
,抛出\Exception
,然后产生3
。/** @var \Generator $gen */
$gen = function () {
for ($i = 1; $i <= 3; $i++) {
if ($i == 2) {
throw new \Exception('Exception thrown for 2');
}
yield $i;
}
};
这是我尝试运行此代码的示例,以便使其产生3
$g = $gen();
var_export($g->current());
echo "\n";
try {
$g->next();
var_export($g->current());
echo "\n";
} catch (\Exception $e) {
echo $e->getMessage() . "\n";
}
try {
$g->next();
var_export($g->current());
echo "\n";
} catch (\Exception $e) {
echo $e->getMessage() . "\n";
}
以下是上述代码的输出结果。
1
Exception thrown for 2.
NULL
因此,对next()
的重复调用无效,并且current()
将返回NULL
,我希望生成器在异常之后继续运行,以便我可以得到3
。