En Python 2, par exemple:
import sys
print>>sys.stderr, "Found", numerrs, "errors in the input."
sys.exit(1)
En Python 3 (ou 2.6 ou 2.7 avec la déclaration from __future__ import print_function
en haut de votre module), print
devient une fonction et la syntaxe pour " d'erreur standard » est maintenant
print("Found", numerrs, "errors in the input.", file=sys.stderr)
(une syntaxe un peu plus convivial que l'étrange >>
nécessaire en Python 2 ;-). Le (petit) avantage de print
par rapport à (disons) sys.stderr.write
est que vous obtenez "toutes les commodités modernes": toutes les parties du message d'erreur sont automatiquement transformées en chaînes, elles sont sorties avec des séparateurs d'espace, et une ligne -end est sortie pour vous à la fin (sauf si vous demandez spécifiquement autrement). Pour utiliser sys.stderr.write
, vous devez générer la chaîne exacte à produire, en utilisant généralement des constructions de formatage de chaîne - ce qui n'est pas une grosse affaire, bien sûr, juste une petite question de commodité.
logging
est généralement préféré, mais pas quand vous voulez spécifiquement le message d'erreur pour aller à l'erreur standard et d'erreur standard seulement: logging
offre beaucoup, beaucoup plus de possibilités (envoyer des messages de divers gravité, filtrer certains, mettre un peu à fichiers, et ainsi de suite), mais par conséquent, il est inévitablement un peu plus complexe.
Comment puis-je utiliser la journalisation pour générer une erreur standard (je l'utilise déjà pour la sortie vers un fichier)? Comment puis-je séparer les deux flux? – yassin
'logging' écrit dans' stderr' par défaut; Si vous voulez séparer les flux, regardez ceci: http://docs.python.org/library/logging.html#logging-to-multiple-destinations – leoluk
Que diriez-vous de 'raise SystemExit' au lieu de' sys.exit', semble un peu plus pythonique pour moi. –