nounours > Ça va souvent dépendre des capacités du langage et du design de l'application : si faire des vérifications manuelles est trop contraignant ou alourdit inutilement le code, on peut se contenter d'une exception pour gérer ça 'rapidement'. Y'a d'ailleurs de grosses différences de ce côté là entre les langages à typage fort/faible et statique/dynamique puisque bon nombre de vérifications manuelles et/ou rescousses d'exceptions sont liées aux types.
Mais d'une manière générale, les exceptions sont, comme leur nom l'indique, là pour gérer des évènements _exceptionnels_. Un utilisateur qui mets un mauvais input, c'est pas du tout un évènement exceptionnel, c'est même un cas qui va très certainement se produire avec n'importe quel utilisateur.
Les exceptions sont coûteuses à placer et maintenir, et peuvent rapidement encombrer un code, mieux vaut les utiliser avec parcimonie.
Y'a d'ailleurs quelques livres qui donnent quelques conventions, bonnes pratiques et design patterns sur la gestion des exceptions, qui peut être un élément très important dans une application.