English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Обработка исключений в Scala подобна другим языкам, например, Java.
Методы в Scala могут останавливать выполнение соответствующего кода с помощью методов выбрасывания исключений, не требуя возвращать значение.
Методы выбрасывания исключений в Scala такие же, как и в Java, они используют метод throw, например, выбросить новый параметр исключения:
throw new IllegalArgumentException
Механизм перехвата исключений аналогичен другим языкам, если возникает исключение, предложение catch перехватывает его по порядку. Поэтому в предложениях catch более конкретные исключения должны быть в начале, а более общие — в конце. Если выброшенное исключение не находится в предложениях catch, это исключение не может быть обработано и будет передано вызывателю.
Предположение исключений catch, грамматика несколько отличается от других языков. В Scala используется идея соответствия шаблонов для соответствия исключений, поэтому в коде catch — это серия предложений case, как показано в следующем примере:
import java.io.FileReader import java.io.FileNotFoundException import java.io.IOException object Test { def main(args: Array[String]) { try { val f = new FileReader("input.txt") } case ex: FileNotFoundException => { println("Missing file exception") } case ex: IOException => { println("IO Exception") } } } }
Выполните следующий код, результат вывода будет:
$ scalac Test.scala $ scala Test Missing file exception
Содержимое предложения catch полностью совпадает с case в match. Поскольку перехват исключений выполняется по порядку, если наиболее общее исключение, Throwable, написано в начале, то все case после него не будут перехвачены, поэтому его необходимо написать в конце.
Фраза finally используется для выполнения шагов, которые необходимо выполнить независимо от того, произошла ли ошибка или нет, пример приведен ниже:
import java.io.FileReader import java.io.FileNotFoundException import java.io.IOException object Test { def main(args: Array[String]) { try { val f = new FileReader("input.txt") } case ex: FileNotFoundException => { println("Missing file exception") } case ex: IOException => { println("IO Exception") } } println("Exiting finally...") } } }
Выполните следующий код, результат вывода будет:
$ scalac Test.scala $ scala Test Missing file exception Exiting finally...