0
0
Kotlinprogramming~10 mins

Exception handling in coroutines in Kotlin - Step-by-Step Execution

Choose your learning style9 modes available
Concept Flow - Exception handling in coroutines
Start Coroutine
Try block runs
Exception thrown?
NoCoroutine completes normally
Yes
Catch block handles exception
Coroutine resumes or ends
Finally block runs (optional)
Coroutine ends
The coroutine starts and runs code inside a try block. If an exception happens, it jumps to the catch block to handle it, then continues or ends. Finally block runs last if present.
Execution Sample
Kotlin
import kotlinx.coroutines.*

fun main() = runBlocking {
  try {
    launch { throw Exception("Error in coroutine") }
  } catch (e: Exception) {
    println("Caught: ${e.message}")
  }
}
This code launches a coroutine that throws an exception, which is NOT caught by the outer catch block.
Execution Table
StepActionEvaluationResult
1Start runBlocking scopeNo exceptionScope started
2Enter try blockNo exception yetReady to launch coroutine
3launch coroutineCoroutine startedCoroutine running asynchronously
4Coroutine throws ExceptionException thrown inside coroutineException propagates
5Catch block in main try-catch?No, exception is in coroutine contextCatch block NOT triggered here
6Coroutine fails silently (default)Exception not caught by outer tryException logged by coroutine machinery
7runBlocking completesNo exception caughtProgram ends without printing catch message
💡 Coroutine exception is not caught by outer try-catch because it runs asynchronously; coroutine machinery handles it.
Variable Tracker
VariableStartAfter Step 3After Step 4Final
Coroutine StateNot startedRunningFailed with ExceptionEnded
Exception caughtNoNoNoNo
Key Moments - 2 Insights
Why doesn't the catch block catch the exception thrown inside the coroutine?
Because the coroutine runs asynchronously, the exception happens outside the try block's direct scope. The try-catch only catches exceptions thrown in the same thread and scope, not inside launched coroutines (see execution_table step 5).
How can exceptions inside coroutines be caught properly?
You can use CoroutineExceptionHandler or try-catch inside the coroutine itself. The outer try-catch won't catch exceptions from launched coroutines (see execution_table step 6).
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, at which step does the coroutine throw an exception?
AStep 3
BStep 4
CStep 5
DStep 6
💡 Hint
Check the 'Action' and 'Evaluation' columns for when the exception occurs.
According to the variable tracker, what is the coroutine state after step 4?
ARunning
BNot started
CFailed with Exception
DEnded
💡 Hint
Look at the 'Coroutine State' row and the 'After Step 4' column.
If you want the outer try-catch to catch coroutine exceptions, what should you do?
AUse CoroutineExceptionHandler or try-catch inside coroutine
BLaunch coroutine inside try block
CNothing, outer try-catch always catches coroutine exceptions
DUse runBlocking without try-catch
💡 Hint
Refer to key_moments explanation about catching exceptions inside coroutines.
Concept Snapshot
Exception handling in coroutines:
- Exceptions inside launched coroutines are not caught by outer try-catch.
- Use try-catch inside coroutine or CoroutineExceptionHandler.
- Coroutine exceptions propagate asynchronously.
- runBlocking waits for coroutines but doesn't catch their exceptions by default.
Full Transcript
This visual execution shows how exceptions behave in Kotlin coroutines. When a coroutine launched inside a try block throws an exception, the outer catch block does not catch it because the coroutine runs asynchronously. The exception is handled by coroutine machinery, not the outer try-catch. To catch exceptions properly, you must use try-catch inside the coroutine or a CoroutineExceptionHandler. The execution table traces each step, showing the coroutine state and exception flow. The variable tracker highlights how the coroutine state changes from running to failed. Key moments clarify common confusions about exception scope and handling. The quiz tests understanding of when exceptions occur and how to catch them.