Error handling resilience
Error Handling & Resilience Deep Dive¶
Overview¶
Network errors are inevitable. Handle gracefully.
Core Concepts¶
Error categories: - No connectivity (offline) - Timeout - 4xx client error (retry-safe: only 429) - 5xx server error (retry-safe) - Parse error (non-retriable)
Code Examples¶
// Error classification
sealed class Result<T> {
data class Success<T>(val data: T) : Result<T>()
data class NetworkError<T>(val ex: IOException) : Result<T>()
data class HttpError<T>(val code: Int) : Result<T>()
data class ParseError<T>(val ex: Exception) : Result<T>()
}
// Retry decision
fun shouldRetry(result: Result<*>): Boolean {
return result is Result.NetworkError ||
result is Result.HttpError && result.code >= 500
}
Senior-Level Insights¶
- Classify errors for metrics
- Fallback to cached data
- Expose errors to user appropriately