209 votes

En Python, comment devrais-je tester si une variable est Aucune, Vrai ou Faux

J'ai une fonction qui permet de retourner l'une des trois choses:

  • de réussite (True)
  • l'échec (False)
  • erreur de lecture/analyse de flux (None)

Ma question est, si je ne suis pas censé test contre True ou False, comment dois-je voir quel sera le résultat. Ci-dessous est la façon dont je suis en train de le faire:

result = simulate(open("myfile"))
if result == None:
    print "error parsing stream"
elif result == True: # shouldn't do this
    print "result pass"
else:
    print "result fail"

est-il vraiment aussi simple que de retirer l' == True partie ou devrais-je ajouter un tri-bool type de données. Je ne veux pas l' simulate fonction pour générer une exception, car tout ce que je veux que l'extérieur de la programme avec un message d'erreur est de l'enregistrer et continuer.

231voto

SilentGhost Points 79627
if result is None:
    print "error parsing stream"
elif result:
    print "result pass"
else:
    print "result fail"

keep it simple et explicite. Bien sûr, vous pouvez pré-définir un dictionnaire.

messages = {None: 'error', True: 'pass', False: 'fail'}
print messages[result]

Si vous prévoyez de modifier votre simulate fonction pour inclure plus de codes de retour, le maintien de ce code peut devenir un peu d'un problème.

L' simulate peut également déclencher une exception sur l'erreur d'analyse, auquel cas vous seriez l'un et l'autre attraper, là ou le laisser se propager d'un niveau et l'impression bits serait réduite à une ligne if-else.

135voto

Paul McGuire Points 24790

Ne craignez pas l'exception! Avoir votre programme suffit de vous connecter et de continuer est aussi simple que:

 try:
    result = simulate(open("myfile"))
except SimulationException:
    print "error parsing stream"
else:
    if result:
        print "result pass"
    else:
        print "result fail"

# execution continues from here, regardless of exception or not
 

Et maintenant, vous pouvez avoir un type de notification beaucoup plus riche grâce à la méthode de simulation indiquant exactement ce qui ne va pas, au cas où vous trouveriez une erreur ou une non-erreur trop peu informative.

14voto

S.Lott Points 207588

Jamais, jamais, jamais dire

if something == True:

Jamais. C'est fou, depuis que vous êtes de manière redondante de répéter ce qui est redondante spécifié comme redondant règle de condition d'un if.

Pire, encore, jamais, jamais, jamais dire

if something == False:

Vous avez not. N'hésitez pas à utiliser.

Enfin, faisant a == None est inefficace. N' a is None. None est un spécial objet singleton, il ne peut en être un. Il suffit de vérifier pour voir si vous avez cet objet.

2voto

kgiannakakis Points 62727

Je crois que lancer une exception est une meilleure idée de votre situation. Une alternative sera la méthode de simulation pour retourner un tuple. Le premier élément sera le statut et le second le résultat:

 result = simulate(open("myfile"))
if not result[0]:
  print "error parsing stream"
else:
  ret= result[1]
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X