Как получить доступ к переменным, объявленным перед блоком catch catch в блоке catch в искровой scala

Bab спросил: 12 мая 2018 в 05:06 в: scala

Я определил переменную, как указано ниже, в моем коде spark-scala и попробую блок catch.

var exceptionFlag = ""try{  exceptionFlag = "FALSE"}
catch{
  exceptionFlag = "TRUE"
}

после этого try catch block, мне нужно написать логику, основанную на флаг.

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

Определенная переменная не может получить доступ в блоке catch, поэтому я не могу установить флаг.

Не могли бы вы предложить как справиться с этой ситуацией ...

Спасибо, Bob


2 ответа

Есть решение
Denis Makarenko ответил: 12 мая 2018 в 08:31

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: ()Unitscala> test()
write the error details to hive...scala> 
Bab ответил: 21 мая 2018 в 02:43
Да. Это тоже хорошо работает, спасибо ..
Manoj Kumar Dhakd ответил: 12 мая 2018 в 05:43

Вы можете сделать это следующим образом

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...
Bab ответил: 12 мая 2018 в 06:29
Спасибо Manoj, теперь он работает отлично.