Je pense que si, pour renvoyer un code d'erreur ou lever une exception est quelque chose de très valable à penser, et une inter-comparaison linguistique peut être utile et instructif. Je suppose que la très généralisée réponse à cette préoccupation est tout simplement la contrepartie: que le cadre juridique valeurs de retour pour n'importe quelle fonction doit être aussi petite que possible, et aussi grand que nécessaire.
Généralement, cela signifie que si une méthode renvoie un nombre entier dans un seul cas de test, les utilisateurs peuvent légitimement s'attendre à la méthode de toujours renvoyer un nombre entier ou lever une exception. Mais, bien sûr, la conceptuellement plus simple chemin n'est pas toujours la meilleure façon de traiter les choses.
Le retour-valeur-de-moins-surprise est habituellement None
; et si vous regardez, vous verrez que c'est la sémantique de l' None
de la licence de son utilisation à travers le conseil d'administration: il est un singleton, valeur immuable que, dans beaucoup de cas, évalue False
ou interdit en outre de calcul-pas de concaténation, pas de l'arithmétique. Donc, si vous avez choisi d'écrire un frob(x)
méthode qui renvoie un nombre en une chaîne de caractères d'entrée, et None
pour les non-chaînes numériques et d'autres données, et vous l'utiliser à l'intérieur d'une expression comme a=42+frob('foo')
, vous obtenez toujours une exception très près du point où bidon de choses qui s'est passé. Bien sûr, si vous avez des trucs frob('foo')
dans une colonne de base de données qui n'a pas été défini avec NOT NULL
, vous risquez de rencontrer des problèmes voire des mois plus tard. Cela peut ou peut ne pas être justifiable.
Donc, dans la plupart des cas où, par exemple, vous voulez en tirer un certain nombre à partir d'une chaîne, à l'aide de somwething comme un nu - float(x)
ou int(x)
est le chemin à parcourir, comme ces built-ins va lever une exception lorsqu'il n'est pas donné une digeste entrée. Si cela ne convient pas à votre cas d'utilisation, envisager de revenir None
à partir d'une méthode personnalisée; en général, cette valeur de retour indique aux consommateurs que " Désolé, j'ai été incapable de comprendre votre entrée.'. Mais vous ne voulez faire cela que si vous positivement savoir qui se passe dans votre programme ne fait sens à partir de ce point.
Vous voyez, je viens de trouver comment l'activer chaque avis, avertissement et le message d'erreur en un show-arrêt exception dans, euh, PHP. Il me rend folle qu'une faute de frappe dans le nom d'une variable génère dans le standard de configuration de PHP, rien, mais un préavis à l'utilisateur. C'est donc mauvais. Le programme va juste faire les choses avec un code de programme qui ne fait pas de sens! Je ne peux pas croire que des gens trouve cette fonctionnalité.
De même, on devrait l'afficher comme ceci: si, à un moment donné dans le temps, il peut être affirmé avec des coûts raisonnables que l'exécution d'un morceau de code n'a pas plus de sens, puisque les valeurs sont manquantes, il est hors de question, ou sont d'un type inattendu, ou lorsque les ressources comme une connexion de base de données sont allés vers le bas - il est impératif, afin de minimiser le débogage des maux de tête, de briser l'exécution et de contrôle de la main jusqu'à tout niveau dans le code qui se sent le droit de gérer l'incident.
L'expérience montre qu'en s'abstenant de début de l'action et en permettant à de fausses valeurs à glisser dans vos données est bon à rien, mais de rendre votre code plus difficile à déboguer. Il en est de nombreux exemples de trop zélé de conversion de type: permettant entiers pour être ajouté à la flotte est raisonnable. Pour permettre une chaîne avec rien, mais les chiffres pour être ajouté à un nombre est un faux pratique susceptible de créer d'étranges unlocalized les erreurs qui peuvent apparaître sur toute la ligne qui se trouve être le traitement des données.