On a une vision assez différente de la chose, c'est marrant. Pour moi une exception doit être lancée quand il n'est pas possible de continuer normalement dans ces conditions. Pour des erreurs normales qui peuvent arriver mieux vaut utiliser la valeur de retour, mais normalement les vérifications devraient être faites en amont, par exemple je préfère:
if (exists("pouet.txt"))
f = open("pouet.txt"); // exception si le fichier n'existe pas -> ne devrait pas arriver
Plutôt que:
if (!(f = open("pouet.txt")))
print "Et merde..."; // Le même bordel pour chaque fichier...
La vérification 'exists' n'a pas besoin d'être faite pour des fichiers essentiels de l'application, puisque si un d'eux manque à l'appel l'application ne démarrera simplement pas, et c'est un cas exceptionnel qui mérite de grosses mesures ^^