Ответ
В Kotlin есть несколько способов обработки исключений:
- try-catch-finally - основной механизм:
try {
// опасный код
} catch (e: IOException) {
// обработка конкретного исключения
} catch (e: Exception) {
// обработка других исключений
} finally {
// выполнится в любом случае
}
- runCatching - функциональный стиль:
val result = runCatching {
// код, который может выбросить исключение
}.fold(
onSuccess = { value -> /* обработка успеха */ },
onFailure = { e -> /* обработка ошибки */ }
)
- Result - обертка для возврата результата или исключения:
fun loadData(): Result<String> = runCatching {
// код с возможным исключением
}
- CoroutineExceptionHandler - для корутин:
val handler = CoroutineExceptionHandler { _, exception ->
// обработка исключения
}
Важно правильно выбирать тип обработки в зависимости от контекста и не злоупотреблять перехватом всех исключений (catch Exception).