如何使用多个catch块处理异常

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用多个catch块处理异常相关的知识,希望对你有一定的参考价值。

参考技术A C#异常处理-多重catch块

存在多个catch时,try块中出现异常后,系统将从距离try块最近的catch块中查找相应的异常处理语句,如果匹配成功,就执行catch块中的异常处理语句,执行完之后,不再执行其他catch块中的异常处理语句,这个查找过程是从上到下的,主要是检查catch后面括号中的异常对象是否和系统捕获到的异常兼容。上面语句中有两个catch块,其中后面一个异常处理中Exception是所有异常类的基类,其能够兼容任何异常对象。如果把Exception放在try后面的第一个catch块中,则其后面的所有catch语句不能被执行,所以通常把具体的异常放在前面,把基类放在最后的catch块中。

异常处理

 

 

 

PHP 5 添加了类似于其它语言的异常处理模块。在 PHP 代码中所产生的异常可被 throw 语句抛出并被 catch 语句捕获。需要进行异常处理的代码都必须放入 try 代码块内,以便捕获可能存在的异常。每一个 try 至少要有一个与之对应的 catch。使用多个 catch 可以捕获不同的类所产生的异常。当 try 代码块不再抛出异常或者找不到 catch 能匹配所抛出的异常时,PHP 代码就会在跳转到最后一个 catch 的后面继续执行。当然,PHP 允许在 catch 代码块内再次抛出(throw)异常。 

 

function daoShu($num){
if(!is_numeric($num)){
throw new Exception(‘不是正确的数字值‘,‘101‘);
} else if(!$num){
throw new Exception(‘数字不能为0‘,‘102‘);
}
return 1/$num;
}

/**
* 异常使用try块包含,但是如果执行中出现了异常代码,则后面的代码不会再执行了,而跳转到catch块执行
* finally块无论是否会发生异常,始终会在最后执行
*/
try{
// $n1 = daoShu(‘abc‘);
// $n1 = daoShu(0.0);
$n2 = daoShu(‘0‘);
echo $n2;

}catch (Exception $ex){
echo ‘异常序号:‘.$ex->getCode().‘,异常描述:‘.$ex->getMessage().‘<br>‘;
}

以上是关于如何使用多个catch块处理异常的主要内容,如果未能解决你的问题,请参考以下文章

多个catch块

在异常处理结构中可以出现多个catch语句和多个finally语句来处理各种异常吗?

try-catch的使用以及细节

java中 在一个异常处理中啥语句块是可多个的

如何使用 try catch 进行异常处理是最佳实践

AWS Step Functions:如何访问在 catch 块中生成异常的状态的输入?