sys.exit('message') не печатается в IDLE

В python IDLE он не будет печатать указанное сообщение об ошибке при использовании sys.exit(''), но в cmd.exe он будет. Почему?

import sys

try:
    print fail
except:
    sys.exit("This is an example of an error message")

person Mark Weermans    schedule 18.07.2015    source источник


Ответы (1)


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

В документации говорится об аргументах sys.exit:

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

Таким образом, самый безопасный способ — передавать только коды ошибок и использовать дополнительные print (или вызывать пользовательскую функцию выхода, которая дает пользователю анализ того, что произошло).

person runDOSrun    schedule 18.07.2015