处理主脚本中的自定义异常

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了处理主脚本中的自定义异常相关的知识,希望对你有一定的参考价值。

对于此示例,我使用的是Mailgun库。它们提供了5种可以捕获的异常。

我的问题是,在我的主要脚本中如何处理这个问题最好?我想能够捕获所有这些和错误日志,但必须单独捕获所有5,每次我使用Mailgun感觉凌乱。

我的想法是采取每一个并抛出一个标准的例外但我不确定这是否正确?

public function sendMailPs($to, $from, $subject, $msghtml, $msgTxt){

    $mg = Mailgun::create($this->config->key);
    try{
        $res = $mg->messages()->send('domain.com', [
            'from'    => $from,
            'to'      => $to,
            'subject' => $subject,
            'text'=> $msgTxt,
            'html'    => $msgHtml
        ]);
    } catch (HttpClientException $e){
        throw new Exception($e->getMessage(), $e->getCode());
    } catch (HttpServerException $e){
        throw new Exception($e->getMessage(), $e->getCode());
    } catch (HydrationException $e){
        throw new Exception($e->getMessage(), $e->getCode());
    } catch (InvalidArgumentException $e){
        throw new Exception($e->getMessage(), $e->getCode());
    } catch (UnknownErrorException $e){
        throw new Exception($e->getMessage(), $e->getCode());
    }

}
答案

1)当异常扩展父类时,你可以通过catch RuntimeException来减少重复。

final class HydrationException extends RuntimeException implements Exception

2)您可以对您感兴趣的例外使用案例陈述,并默认您不属于的案例。

try
{
   // Code here
}
catch( Exception $e )
{
  switch( get_class( $e ) )
  {
    case 'HttpClientException':
    case 'HydrationException':
    case 'UnknownErrorException':
      throw new Exception($e->getMessage(), $e->getCode());
  }
  throw $e;
}
另一答案
public function sendMailPs($to, $from, $subject, $msgHtml, $msgTxt) {
    $mg = Mailgun::create($this->config->key);
    try{
        $res = $mg->messages()->send('domain.com', [
            'from'    => $from,
            'to'      => $to,
            'subject' => $subject,
            'text'=> $msgTxt,
            'html'    => $msgHtml
        ]);
    } catch (MailgunException $e){
        throw new MailgunException($e->getMessage(), $e->getCode());
    }
}

您可能会丢失来自HttpClientException的额外$响应。因此,您需要清理。或者只是在上面的函数之外使用 Mailgun Exception。

以上是关于处理主脚本中的自定义异常的主要内容,如果未能解决你的问题,请参考以下文章

Java中的自定义异常捕获方式

从自定义适配器获取片段中的 UI 元素 ID

Spring Boot 中的自定义异常

异常和TCP通讯

片段中的Android致命异常

具有获取 json 值的片段中的自定义适配器