Handling exceptions that have been raised can be done with pattern matching
let safe_div x y =
try x / y with
| Division_by_zero -> 0
val safe_div : int -> int -> int = <fun>
safe_div 4 2;;
safe_div 4 0;;
- : int = 2
- : int = 0
A try exception is essentially pattern matching, but only on exceptions