Что может привести к тому, что блок try / catch не сможет обработать исключение, несмотря на то, что выполнение выполнено в блоке catch? - PullRequest
1 голос
/ 29 марта 2020

Выполнение кода ниже

line 108       try 
line 109       {
line 110           columnValCSV = columns_List(fileNumber)(columnNumber)
line 111       }
line 112       catch 
line 113       {
line 114           case e: Exception => println(columnValCSV +"OtherLogText")
line 115       }

попадает в блок перехвата, как показано в трассировке стека.

Исключение в потоке "main" java .lang. ArrayIndexOutOfBoundsException: 10 в Main $. $ Anonfun $ parseSecondDataSource $ 2 (Main. scala: 114) в Main $. $ Anonfun $ parseSecondDataSource $ 2 $ адаптировано (Main. scala: 85) в scala .collection.Iterator. foreach (Iterator. scala: 929) в scala .collection.Iterator.foreach $ (Iterator. scala: 929) в scala .collection.AbstractIterator.foreach (Iterator. scala: 1417) в Main $. $ Anonfun $ parseSecondDataSource $ 1 (Main. scala: 85) в Main $. $ Anonfun $ parseSecondDataSource $ 1 $ адаптирован (Main. scala: 68) в scala .collection.mutable.ResizableArray.foreach ( ResizableArray. scala: 59) в scala .collection.mutable.ResizableArray.foreach $ (ResizableArray. scala: 52) в scala .collection.mutable.ArrayBuffer.foreach (ArrayBuffer. scala: 48 ) на Main $ .parseSecondDataSource (Main. scala: 68) на Main $ .main (Main. scala: 147) на Main.main (Main. scala)

Однако я Вместо того, чтобы избегать генерации исключения, как должен делать мой код, он вылетает.

Ответы [ 2 ]

2 голосов
/ 29 марта 2020

Обработчик исключений также может генерировать.

scala> try throw null catch { case _: NullPointerException => ??? }
scala.NotImplementedError: an implementation is missing
  at scala.Predef$.$qmark$qmark$qmark(Predef.scala:347)
  at .liftedTree1$1(<console>:1)
  ... 28 elided
0 голосов
/ 29 марта 2020

Фактический оператор печати в блоке catch ссылается на ту же переменную, которую я поместил в блок try. Это была проблема

...