2010-06-01 7 views
36

J'écris une petite application et j'ai besoin de quitter le programme plusieurs fois.Comment quitter un programme: sys.stderr.write() ou imprimer

Dois-je utiliser:

sys.stderr.write('Ok quitting')
sys.exit(1)

Ou dois-je faire seulement:

print 'Error!'
sys.exit(1)

Quel est le meilleur et pourquoi? Notez que je dois le faire beaucoup. Le programme devrait complètement quitter.

Répondre

70
sys.exit('Error!') 

Note de the docs:

Si un autre type d'objet est passé, Aucun équivaut à passer de zéro, et tout l'autre objet est imprimé à sys.stderr et donne un code de sortie de 1. En particulier, sys.exit ("certains message d'erreur ") est un moyen rapide de quitter un programme lorsqu'une erreur se produit.

6

S'il s'agit d'un message d'erreur, il devrait normalement aller à stderr - mais cela dépend de votre cas d'utilisation. Si vous prévoyez que les utilisateurs redirigent stdin, stderr et stdout, par exemple lorsque vous exécutez votre programme à partir d'un outil différent, vous devez vous assurer que les informations d'état et les messages d'erreur sont correctement séparés.

Si vous n'utilisez que le programme, vous n'avez probablement pas besoin de vous embêter. Dans ce cas, vous pouvez aussi lever une exception et le programme se terminera tout seul.

Par ailleurs, vous pouvez faire

print >>sys.stderr, "fatal error"  # Python 2.x 
print("fatal error", file=sys.stderr) # Python 3.x 
+0

Merci pour la réponse. – user225312

12

Il existe deux manières différentes d'afficher des messages.

print va généralement à sys.stdout et vous savez où sys.stderr va. Il vaut la peine de connaître la différence entre stdin, stdout, and stderr.

stdout doit être utilisé pour la sortie normale du programme, tandis que stderr doit être réservé uniquement pour les messages d'erreur (exécution de programme anormale). Il existe des utilitaires pour diviser ces flux, ce qui permet aux utilisateurs de votre code de différencier la sortie normale des erreurs.

print peut imprimer sur un objet de type fichier, y compris sys.stderr:

print >> sys.stderr, 'My error message' 

Les avantages de l'utilisation sys.stderr pour les erreurs au lieu de sys.stdout sont:

  1. Si l'utilisateur redirigé vers stdout un fichier, ils voient toujours des erreurs sur l'écran.
  2. Il n'est pas tamponné, donc si sys.stderr est redirigé vers un fichier journal, il y a moins de risque que le programme se bloque avant que l'erreur ne soit consignée.

Il convient de noter qu'il ya une troisième façon, vous pouvez fournir un message de fermeture:

sys.exit('My error message') 

Ceci enverra un message à stderr et la sortie.

Questions connexes