我有以下代码 -
public function getPosts($limit = 25, $author = null) {
try {
} catch(\GuzzleHttp\Exception\ClientException $e) {
return [];
}
return [];
}
我在页面404s中添加了此b / c ClientException
,但是如果服务器返回500错误,我会得到ServerException
- 我尝试将其替换为catch(Exception $ex)
,但我仍然得到未处理/未捕获的异常错误。
答案 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