Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗ktPmExSC 440 of 522 menu
◀ ▶

Несколько блоков catch в Kotlin

В одном try может произойти сбой разного типа. Если указать в catch только один тип, остальные исключения не перехватятся и программа остановится.

Решение - несколько блоков catch подряд. Среда выполнения выбирает первый блок, тип которого подходит к возникшему исключению:

try { // risky code } catch (e: NumberFormatException) { // handle format } catch (e: ArithmeticException) { // handle division }

Пусть функция делит два числа, переданные строками. Ошибка преобразования и деление на ноль обрабатываются разными сообщениями:

fun divideStrings(a: String, b: String) { try { val x = a.toInt() val y = b.toInt() println(x / y) } catch (e: NumberFormatException) { println("not a number") } catch (e: ArithmeticException) { println("division by zero") } } fun main() { divideStrings("10", "0") divideStrings("10", "two") }

Более конкретный catch ставят выше общего. Если сначала написать широкий тип вроде Exception, до узких типов выполнение может не дойти. В начальных задачах достаточно перечислять нужные типы по одному.

val data = listOf(1, 2, 3) val indexStr = "x" try { val i = indexStr.toInt() println(data[i]) } catch (e: NumberFormatException) { println("bad index text") } catch (e: IndexOutOfBoundsException) { println("bad index value") }

Даны строки left и right. В try преобразуйте обе в Int и выведите частное первого на второе. Для NumberFormatException выведите "parse", для ArithmeticException выведите "zero".

Дан список и строка с индексом. В одном try получите индекс и элемент списка. Отдельными catch обработайте NumberFormatException и IndexOutOfBoundsException разными сообщениями на английском.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить