Hmm. Kommt auf die Sprache an.

In Java ganz eindeutig. Aber in Java geht es ohnehin darum, ein gegebenes Problem unter Einsatz möglichst vieler Klassen zu lösen und wenn man nicht jeden zweiten Funktionsaufruf in try/catch wickelt, gilt das als schlechter Stil (so viel übrigens zu C++s häßlichen ifs).

In C++ hab' ich die Dinger nie angefaßt. Aber Ich verwende eh 90% von C++s Fähigkeiten nicht, weil sie arkan, mir nicht bekannt oder auf den ersten Blick komplizierter als eine äquivalente Selbstimplementierung sind.

In PHP benutze ich auch keine. Da jede Funktion alles zurückgeben kann und man mit Assertions oft gerade mal ein Bit an Information liefert (namentlich, daß die aufgerufene Funktion nicht korrekt gearbeitet hat) belasse ich es in der Regel bei return false.

In Objective-C könnte ich wohl welche verwenden, aber die Sprache ist dem Anschein nach zu robust, um häufig welche zu benötigen. Nullpointer sind unproblematisch und bei einem Fehler kommt meistens einfach nil raus und das ist ein gültiger Wert für weitere Funktionen. Ich könnte strikt sein und das Programm abschmieren lassen, wenn es beispielsweise eine Datei nicht finden kann. Nur mach' ich das nicht.