例外:重新抛出和多个catch块

问题描述 投票:1回答:2

我有一种情况,我想在catch块内重新引发异常,并让它被更通用的catch捕获。

示例:

try {
    somethingThatMightThrowExceptions();
}
catch (ClientErrorResponseException $e) {
    if ($e->getResponse()->getStatusCode() == 404) {
        return $this->notFound();
    }
    throw $e; // even tried throw new \Exception();
}
catch (\Exception $e) {
    return $this->serverError('Server error');
}

因此,在我的第一个catch块中,我检查特定条件,如果失败,我想重新引发该异常,并用通用catch (\Exception)块将其捕获。但是在这种情况下,它只会冒泡回到调用方。

问题是,最终catch中实际上还有多行代码,我不想重复。我当然可以将它们提取为一种方法,但这感觉有些过头了。

因此,基本上,我想在线完成所有这些操作而不必添加额外的图层。有什么建议吗?

php exception-handling
2个回答
1
投票

这是因为您抛出的异常不带try块,因此只能捕获一次。如果确定要这样做,则需要按注释中的@deceze嵌套try..catch语句。

您应该描述您要完成的任务,因为可能有更好的方法来完成它。


0
投票

您有两个选择:a)提取方法的通用逻辑。 (正如您所提到的,有时这可能会过分杀伤)b)捕获最通用的异常并检查其类型。即:

© www.soinside.com 2019 - 2024. All rights reserved.