В python IDLE он не будет печатать указанное сообщение об ошибке при использовании sys.exit(''), но в cmd.exe он будет. Почему?
import sys
try:
print fail
except:
sys.exit("This is an example of an error message")
В python IDLE он не будет печатать указанное сообщение об ошибке при использовании sys.exit(''), но в cmd.exe он будет. Почему?
import sys
try:
print fail
except:
sys.exit("This is an example of an error message")
Ваше сообщение об ошибке выводится в stderr
, который не отображается в IDLE, поскольку выполняется в подпроцессе (см. этот отчет о вашем наблюдении и этот связанный ответ). Поэтому IDLE записывает его на терминал, используемый для запуска IDLE.
В документации говорится об аргументах sys.exit
:
В некоторых системах есть соглашение о присвоении определенных значений конкретным кодам выхода, но они, как правило, недостаточно развиты; Программы Unix обычно используют 2 для синтаксических ошибок командной строки и 1 для всех других типов ошибок. Если передается объект другого типа, None эквивалентно передаче нуля, а любой другой объект печатается в stderr и приводит к коду выхода 1. В частности, sys.exit("некоторое сообщение об ошибке") — это быстрый способ выход из программы при возникновении ошибки.
Таким образом, самый безопасный способ — передавать только коды ошибок и использовать дополнительные print
(или вызывать пользовательскую функцию выхода, которая дает пользователю анализ того, что произошло).