【问题标题】:Why does Throwable catch ignore 'continue' but it does work with 'return'?为什么 Throwable catch 忽略“继续”但它确实与“返回”一起工作?
【发布时间】: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 语句

标签: php try-catch throwable


【解决方案1】:

如果它抛出错误,那么你没有捕捉到正确的错误。 continue 将在那里工作,老实说这是多余的,因为代码无论如何都会去。

【讨论】:

  • 如果我删除 continue ,它也会抛出错误并完成代码 - 只有当我在里面放一个 return 时,catch 才有效
  • 你能发布错误和错误类型,因为我认为你遇到了错误的错误。
  • \Symfony\Component\Process\Exception\ProcessFailedException: The command "node C:\xampp\htdocs\gdpr\node_modules\@nesk\rialto\src\node-process\serve.js C:\xampp\htdocs\gdpr\vendor\nesk\puphpeteer\src\PuppeteerConnectionDelegate.js "{""idle_timeout"":60,""log_node_console"":false,""log_browser_console"":false}"" failed. Throwable 应该处理所有事情,不是吗?
  • 你能试着把 Exception 换成 Throwable
  • 我做了,同样的事情 - 我通过在返回 true 或 false 的不同私有函数中包含 try catch 来解决它,但我仍然有点困惑为什么我不能简单地捕获发出并且什么都不做(让代码继续)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-27
  • 1970-01-01
  • 2015-03-04
相关资源
最近更新 更多