Il semble que cela soit accepté comme un code parfaitement bon dans la communauté Python :
def is_integer(input):
try:
return x % 1 == 0
except TypeError:
return False
En revanche, le code Java (presque) équivalent serait mal vu par la communauté Java :
boolean is_integer(Object input){
try{
Integer temp = (Integer)input;
return true;
}catch(ClassCastException e){
return false;
}
}
Pourquoi ?
Mise à jour :
Désolé pour le mauvais exemple ci-dessus. Je comprends qu'il existe de meilleures façons de gérer la situation spécifique décrite ci-dessus. Ma question est plus générale : Pourquoi la mentalité générale dans la communauté Python est-elle "Demander le pardon plutôt que la permission", mais pas en Java ? Est-ce à cause de la différence de langage ? De la différence de base d'utilisateurs ? Ou est-ce historique ? Quels sont les avantages et les inconvénients de ces deux mentalités différentes, etc.
Mise à jour2
La "mentalité Java" :
La capture d'une exception de type "Null Pointer" est-elle une odeur de code ?
Lien vers les parties pertinentes du célèbre livre "Java efficace 2e édition"
extrait du livre ci-dessus :
T simple : les exceptions sont, comme leur nom l'indique les exceptions sont, comme leur nom l'indique, à utiliser uniquement dans des conditions exceptionnelles ; elles ne doivent jamais être utilisées pour un flux de ordinaire.
La "mentalité python" :
Python - Vérifier qu'une variable est entière ou non
http://en.wikipedia.org/wiki/Python_syntax_and_semantics#Exceptions
extrait de l'article de wikipedia ci-dessus :
Le style Python prévoit l'utilisation de chaque fois qu'une condition d'erreur d'erreur. Plutôt que de tester l'accès à un l'accès à un fichier ou à une ressource avant avant de l'utiliser, il est conventionnel en Python d'aller de l'avant et d'essayer de d'essayer de l'utiliser, et d'attraper l'exception si l'accès est refusé. l'accès est refusé. Les exceptions peuvent également être utilisées comme un moyen plus de transfert de contrôle non local [...] Les exceptions sont souvent [...] utilisées comme une alternative au bloc if. A Une devise souvent invoquée est EAFP, ou "Il est plus facile de demander pardon". [...] permission".
Autre exemple :
try:
User.objects.get(username=username)
except User.DoesNotExist:
return username
raise forms.ValidationError('Username is already taken.')
Mise à jour3
Voici peut-être un meilleur exemple. En Python, vous essayez simplement d'ouvrir un fichier et, s'il n'existe pas, vous attrapez l'exception et la transmettez à l'utilisateur. Dans la communauté Java, de nombreuses personnes considèrent qu'il est préférable de vérifier d'abord l'existence du fichier.