如何捕获多个异常类型?

时间:2016-07-07 21:31:11

标签: php exception guzzle

我有以下代码 -

public function getPosts($limit = 25, $author = null) {

    try {

    } catch(\GuzzleHttp\Exception\ClientException $e) {
        return [];
    }

    return [];
}

我在页面404s中添加了此b / c ClientException,但是如果服务器返回500错误,我会得到ServerException - 我尝试将其替换为catch(Exception $ex) ,但我仍然得到未处理/未捕获的异常错误。

4 个答案:

答案 0 :(得分:2)

你可以在php中为不同的异常类型设置多个catch块:

  try {

    } catch(\GuzzleHttp\Exception\ClientException $e) {
        return [];
    } catch(\GuzzleHttp\Exception\ServerException  $e) {
       //handle it...
 }

但是,假设Guzzle异常扩展了一般的php Exception类(当然它们会这样做),将其更改为Exception $e应该有效。你确定这是抛出异常的地方吗?

在guzzle网站http://docs.guzzlephp.org/en/latest/quickstart.html#exceptions上,您可以看到所有客户端/服务器扩展的GuzzleHttp\Exception\TransferException基础,因此您可以尝试捕获GuzzleHttp\Exception\TransferException;

答案 1 :(得分:1)

只列出多个捕获量:

try {
   ...
} catch (FooException e) {
   ...
} catch (BarException e) {
   ...
} catch (Exception e) {
   ...
}

答案 2 :(得分:0)

catch可以一个接一个地链接,以处理多个错误类型。

public function getPosts($limit = 25, $author = null) {

    try {

    } catch(\GuzzleHttp\Exception\ClientException $e) {
        return [];
    } catch(\GuzzleHttp\Exception\ServerException $e) {
        return [];
    }

    return [];
}

答案 3 :(得分:0)

继续捕捉

public function getPosts($limit = 25, $author = null) {

    try {

    } catch(\GuzzleHttp\Exception\ClientException $e) {
        return [];
    } catch (ServerException) {
        //some code
    }

    return [];
}

要注意名称空间,如果你试图捕获异常它会捕获所有异常,如果没有,也许你没有包含异常作为使用异常或试图捕获\ Exception