Scala:错误处理和异常匹配

3天

鉴于以下习惯Exception...

trait ServiceException extends RuntimeException {

  val errorCode: Int
}

object ServiceException {

  def apply(
    message: String, _errorCode: Int
  ): ServiceException = new RuntimeException(message) with ServiceException {
    val errorCode: Int = _errorCode
  }

  def apply(
    message: String, cause: Throwable, _errorCode: Int
  ): ServiceException = new RuntimeException(message, cause) with ServiceException {
    val errorCode: Int = _errorCode
  }
}

...以及以下方法返回Future...

myService.doSomethingAndReturnFuture.map {
  ...
}.recover {
  case ServiceException(5) =>
    Logger.debug("Error 5")
// this does not work
// case e: ServiceException(5) =>
//   Logger.debug(s"Error 5: ${e.getMessage}")
  case NonFatal(e) =>
    Logger.error("error doing something", e)
}

...如何从中获取错误消息ServiceException

吉娇

您需要一个,unapply以便您描述的匹配项起作用,该匹配项应在伴随对象中定义。

object ServiceException {

   //... apply methods

  def unapply(ex: ServiceException) = Some(ex.errorCode)  
}

然后,您可以进行匹配。

recover {
  case se@ServiceException(5) => println(s"Error 5: ${se.getMessage}")
  case _ => println("Some other error")
}

您也可以在中添加邮件unapply

def unapply(ex: ServiceException) = Some((ex.errorCode, ex.getMessage))

然后像这样匹配:

recover {
  case ServiceException(5, msg) => println(s"Error 5: $msg")
  case _ => println("Some other error")
}

或者,您也可以不使用unapply然后看起来像:

recover {
  case se: ServiceException if se.errorCode == 5 => println(s"Error 5: ${se.getMessage}")
  case _ => println("Some other error")
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

错误处理,引发异常和用户输入

来自分类Dev

抛出异常/错误时的错误处理

来自分类Dev

错误处理和信号

来自分类Dev

全局错误处理程序的任何异常

来自分类Dev

NASM程序集中的异常/错误处理

来自分类Dev

Scala Futures:每个新创建或映射的异常的默认错误处理程序

来自分类Dev

Scala Futures:每个新创建或映射的异常的默认错误处理程序

来自分类Dev

Scala / Java错误处理NullPointerException

来自分类Dev

Scala错误处理:尝试还是选择?

来自分类Dev

Scala Spark行级错误处理

来自分类Dev

Scala中的商务逻辑错误处理

来自分类Dev

scala 函数内部的错误处理

来自分类Dev

Python错误处理和连接错误

来自分类Dev

RxJava链接的可观察对象和错误处理(自定义异常传播)

来自分类Dev

NSXML解析器和异常/错误处理Swift 2.0

来自分类Dev

ASP.NET MVC Core和Dapper中的全局异常/错误处理

来自分类Dev

错误和异常处理

来自分类Dev

Go方法链接和错误处理

来自分类Dev

C检查NULL和错误处理

来自分类Dev

EJB,XA事务和错误处理

来自分类Dev

拒绝Javascript承诺和错误处理

来自分类Dev

fgets和错误处理的小麻烦

来自分类Dev

bash:错误处理和功能

来自分类Dev

jQuery延迟的错误处理和恢复

来自分类Dev

Swift 2.2错误处理和音频

来自分类Dev

python asyncio和错误处理

来自分类Dev

跨域错误处理和WCF

来自分类Dev

expressJS承诺和错误处理

来自分类Dev

JsonResult 和 ActionResult 的错误处理