💧 Elixir Intermediate

What is Elixir's error handling approach?

Answer

Elixir distinguishes between expected errors and unexpected failures. Expected errors: use tagged tuples — functions return {:ok, result} or {:error, reason}. Handle with pattern matching: case File.read(path) do {:ok, content} -> process(content); {:error, reason} -> log(reason) end. With: chain multiple ok/error operations: with {:ok, user} <- find_user(id), {:ok, order} <- find_order(user), do: process(order) — short-circuits on first error. Unexpected errors: let the process crash (supervisor restarts it). Avoid excessive defensive coding. try/rescue: for exceptional cases requiring exception handling (e.g., wrapping Erlang code): try do risky_operation() rescue e in RuntimeError -> handle(e) end. raise/throw: for programmer errors and control flow within a process. The ! convention: File.read! raises on error vs File.read returning {:ok, _}. Most Elixir code uses tagged tuples over exceptions for expected failure modes.