False. In languages with better type systems (e.g. ML and Haskell), you generally use the "Option" (OCaml) or "Maybe" (Haskell) type in situations like these.
(Example code is OCaml)
type 'a checked = Pass of 'a | Fail
(* very much a toy example *)
let even x = (x mod 2 == 0)
let can_fail x = match x with
| 0 -> Fail
| x when (even x) -> Pass (x * 10)
| x -> Pass (x)
# can_fail 2;;
- : int checked = Pass 20
# can_fail 3;;
- : int checked = Pass 3
# can_fail 0;;
- : int checked = Fail
#
The languages infers where you're passing around option types (such as "int checked" above) and forces the calling function to account for any potential failures. Rather than just Pass 'a and Fail, it could be Pass, File_Not_Found, Access_Denied, etc., and (Unknown_Error string). OCaml also has exceptions, but the combination of union types and required exhaustive matching covers most cases.