如何在spark scala中的catch块中访问try catch块之前声明的变量

时间:2018-06-05 18:47:00

标签: scala

我在spark-scala代码中定义了一个变量,并尝试使用catch块。

if (exceptionFlag = "TRUE"){
   write the error details to hive...
}

在这个try catch块之后,我需要根据标志写出逻辑。

{{1}}

我定义的变量无法在catch块中访问,因此我无法设置标志。

你能否建议如何处理这种情况......

谢谢, 鲍勃

2 个答案:

答案 0 :(得分:1)

try ... catch是Scala中的表达式,您可以在不使用var:

的情况下执行相同的操作
scala> :paste
// Entering paste mode (ctrl-D to finish)

  def test(): Unit ={
    val exceptionFlag = try{
      val x=10/0
      "FALSE"
    }
    catch{
      case ex: Exception=> "TRUE"
    }

    if (exceptionFlag == "TRUE"){
      println("write the error details to hive...")
    }
  }

// Exiting paste mode, now interpreting.

test: ()Unit

scala> test()
write the error details to hive...

scala> 

答案 1 :(得分:0)

你可以这样做

object Driver{

  def test(): Unit ={
    var exceptionFlag = ""
    try{
      val x=10/0
      exceptionFlag = "FALSE"
    }
    catch{
      case ex: Exception=> exceptionFlag = "TRUE"
    }
    if (exceptionFlag == "TRUE"){
      println("write the error details to hive...")
    }
  }

  def main(arr:Array[String]) {
    test
  }
}

示例输出:

write the error details to hive...