В Python 2, например:
import sys
print>>sys.stderr, "Found", numerrs, "errors in the input."
sys.exit(1)
В Python 3 (или 2.6 или 2.7 с оператором from __future__ import print_function
в верхней части вашего модуля), print
становится функцией и синтаксисом«печать на стандартную ошибку» теперь
print("Found", numerrs, "errors in the input.", file=sys.stderr)
(несколько более дружественный синтаксис, чем странный >>
, необходимый в Python 2; -).
(небольшое) преимуществоprint
против (скажем) sys.stderr.write
в том, что вы получаете «все современные удобства»: все части сообщения об ошибке автоматически превращаются в строки, они выводятся с разделителями пробелов, а для вас выводится конец строкив конце (если вы специально не потребуете иного).Чтобы использовать sys.stderr.write
, вам нужно построить точную строку для вывода, как правило, с использованием конструкций форматирования строки - конечно, это не большая проблема, просто небольшая часть удобства.
logging
обычнопредпочтительнее, но не в тех случаях, когда вы хотите, чтобы сообщение об ошибке переходило к стандартной ошибке, а только к стандартной ошибке: logging
предлагает много-много других возможностей (отправлять сообщения различной степени серьезности, фильтровать некоторые, помещать некоторые в файлы и т. д.), но это неизбежно немного сложнее.