如何将错误消息动态传递到Scala中的自定义异常

时间:2018-12-06 20:48:00

标签: scala

当前,我编写了多个自定义异常案例类来引发异常消息。在此自定义异常中,除了名称之外,其他所有内容都相同。有没有一种方法可以将异常消息动态地仅传递给一个类。这样,我可以避免编写多个case类。 有没有更好的方法来实现该方案?任何建议。 在catch块中抛出自定义消息的目的是使Spark作业失败,并带有适当的异常消息。

示例:

// case class
// Custom Exception-1
final case class MissingRule(private val message: String = "",
                             private val cause: Throwable = None.orNull)
extends Exception(message, cause)
// Custom Exception-2
final case class MissingPrimaryKey(private val message: String = "",
                             private val cause: Throwable = None.orNull)
extends Exception(message, cause)

这是实际的实现方式

Object sampleObj {
 def process(){
 try {
    if (some condition){
        throw MissingRule ("Rule Missing")
    }
    if (some conition){
        throw MissingPrimaryKey ("Key is Missing")
    }
  } catch {
  // Here I am throwing the exception again 
 // so that the spark job will fail with proper error message
    case _: MissingRule =>
      throw MissingRule("Rule Missing")
    case _: MissingPrimaryKey =>
      throw MissingPrimaryKey("Key is Missing")
    case e: Exception =>          
      println("Exception: " + e.printStackTrace().toString)
  } finally {
  // some operation
  }
 }
}

1 个答案:

答案 0 :(得分:1)

我不确定您要在这里实现什么。

如果您不想创建多个类,请仅创建一个类,并始终使用不同的消息来抛出该类:

case class MyCoolException(message: String) extends Exception(message)

或者,反过来,如果您想使用不同的类,但又不想给它们指定消息(很有意义),则只需将这些消息用作默认值而不是"":< / p>

 case class MissingRule(message: String = "Rule is missing") extends Exception(message)     
 case class MissingKey(message: String = "Key is missing") extends Exception(message)

等...