J'ai une fonction qui peut renvoyer l'une des trois choses suivantes:
- succès (
True) - échec (
False) - erreur de lecture / analyse du flux (
None)
Ma question est la suivante: si je ne suis pas censé effectuer un test Trueou Falsecomment devrais-je voir quel est le résultat. Voici comment je le fais actuellement:
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-ce vraiment aussi simple que de supprimer la == Truepartie ou devrais-je ajouter un type de données tri-bool. Je ne veux pas que la simulatefonction lève une exception car tout ce que je veux que le programme externe fasse avec une erreur est de l'enregistrer et de continuer.
simulatefonction, j'attrape toutes les exceptions; Je ne veux pas que ce qui se passe dans le simulateur arrête le reste du programme en cours d'exécution (et le traitement de l'élément suivant). Mais les réponses me font changer d'avis.
simulatedes choses qu'il peut attraper et réessayer, c'est bien. Mais s'il "échoue", il ne devrait pas revenir None. Il devrait simplement déclencher une exception au script qui l'a appelé. De toute façon, simulatec'est fait. Le retour Nonen'est pas aussi utile que de lever une exception appropriée - ou de permettre à une exception de se propager simulatedans le script appelant pour la gestion.
except Exception:plutôt. Cela détecte toutes les erreurs «réelles», ainsi que Warninget StopIteration. Cela permet KeyboardInterruptet à SystemExittravers cependant. Si vous voulez vraiment les attraper, il est probablement préférable d'utiliser une autre structure externe try / except ou une autre structure qui documente clairement votre intention, car ce ne sont pas des "erreurs". (Mais j'ai dit "presque jamais" ... peut-être que dans votre cas, vous voulez vraiment tout saisir, et même empêcher Ctrl-C ou sys.exit()de sortir, etc.)