Подтвердить что ты не робот

Как выйти из программы: sys.stderr.write() или распечатать

Я пишу небольшое приложение, и мне нужно выйти из программы несколько раз.

Должен ли я использовать:

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

Или просто я должен сделать a:

print 'Error!'
sys.exit(1)

Что лучше и почему? Заметьте, что мне нужно сделать это много. Программа должна полностью выйти.

4b9b3361

Ответ 1

sys.exit('Error!')

Примечание документы:

Если передан другой тип объекта, Ни один из них не равен нулю, и любой другой объект печатается на sys.stderr и выводит код выхода 1. В частности, sys.exit( "некоторые сообщение об ошибке" ) - это быстрый способ выйти программа при возникновении ошибки.

Ответ 2

Это два разных способа отображения сообщений.

print обычно переходит в sys.stdout, и вы знаете, куда идет sys.stderr. Стоит знать разницу между stdin, stdout и stderr.

stdout должен использоваться для нормального вывода программы, тогда как stderr должен быть зарезервирован только для сообщений об ошибках (ненормальное выполнение программы). Существуют утилиты для разделения этих потоков, что позволяет пользователям вашего кода различать нормальный выход и ошибки.

print может печатать на любом файлоподобном объекте, включая sys.stderr:

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

Преимущества использования sys.stderr для ошибок вместо sys.stdout:

  • Если пользователь перенаправил stdout в файл, они по-прежнему видят ошибки на экране.
  • Он небуферизирован, поэтому, если sys.stderr перенаправляется в файл журнала, вероятность сбоя программы перед записью ошибки меньше.

Стоит отметить, что есть третий способ, которым вы можете предоставить закрывающее сообщение:

sys.exit('My error message')

Это отправит сообщение на stderr и выйдет.

Ответ 3

Если это сообщение об ошибке, оно обычно должно идти до stderr - но необходимо ли это, зависит от вашего варианта использования. Если вы ожидаете, что пользователи перенаправят stdin, stderr и stdout, например, при запуске вашей программы из другого инструмента, вы должны убедиться, что информация о статусе и сообщения об ошибках разделены чисто.

Если вы используете программу, вам, вероятно, не нужно беспокоиться. В этом случае вы также можете просто создать исключение, и программа завершится сама по себе.

Кстати, вы можете сделать

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