【发布时间】:2020-08-19 09:19:38
【问题描述】:
我有以下代码:
foreach ($inDomainLinks as $href) {
try {
$page->goto($href, ['waitUntil' => 'networkidle2']);
} catch (\Throwable $exception) {
continue;
}
}
我希望如果 Try 中的代码失败,我们继续循环中的下一个值。
但是,上面的代码无论如何都会抛出错误并且执行结束。
例如,如果我尝试这样做:
foreach ($inDomainLinks as $href) {
try {
$page->goto($href, ['waitUntil' => 'networkidle2']);
} catch (\Throwable $exception) {
return $href.' fails';
}
}
它实际上返回了那个值,所以我实际上达到了目标,但我只是不知道为什么第一个代码没有按预期执行(由我)。
有什么想法吗?
到目前为止,我的解决方法正在创建一个封装 try catch 的私有函数:
foreach ($inDomainLinks as $href)
$this->analyzePage($page,$href);
private function analyzePage($page,$href){
try {
$page->goto($href, ['waitUntil' => 'networkidle2']);
return true;
} catch (\Throwable $exception) {
return false;
}
}
【问题讨论】:
-
请提供更多上下文。 The loop should keep iterating just fine. 请注意,
continue在这种情况下没有任何作用,您基本上只是在忽略异常。 -
我添加了
continue,就好像我将catch留空一样,它会抛出异常并且不会捕获它。我必须包含一个辅助函数来处理它,这很有效。不知道为什么 try catch 迫使我包含一个 return 语句