Типы исключений в Kotlin
У каждого исключения есть тип. В catch
указывают именно тип, чтобы реагировать на
конкретную проблему. Ниже - типы, которые
чаще всего встречаются в начальных задачах.
Исключение NumberFormatException возникает, когда
строку нельзя преобразовать в число. Так бывает
после toInt() или toDouble()
для текста вроде "abc":
val raw = "12x"
try {
println(raw.toInt())
} catch (e: NumberFormatException) {
println("invalid number")
}
Исключение ArithmeticException связано с недопустимой
арифметикой. Для целых чисел типичный случай -
деление на ноль:
val x = 10
val y = 0
try {
println(x / y)
} catch (e: ArithmeticException) {
println("bad division")
}
Исключение IndexOutOfBoundsException появляется при
обращении к элементу списка или строки по индексу
вне допустимого диапазона:
val items = listOf("a", "b", "c")
try {
println(items[5])
} catch (e: IndexOutOfBoundsException) {
println("no such index")
}
Исключение IllegalArgumentException сигнализирует,
что аргумент функции или метода не подходит
по смыслу. Его часто выбрасывают сами через
throw, когда значение нарушает правило
задачи:
fun printPositive(n: Int) {
if (n <= 0) {
throw IllegalArgumentException("need positive")
}
println(n)
}
try {
printPositive(-1)
} catch (e: IllegalArgumentException) {
println("bad argument")
}
В одном catch указывают один тип. Если
нужно по-разному реагировать на разные сбои,
добавляют несколько блоков catch - это
разберем в следующем уроке.
Дана строка input. В try получите
из нее Int. В catch для
NumberFormatException выведите "format".
Даны numerator и denominator.
Вычислите частное в try. При
ArithmeticException выведите "math".