Why is exit code not honored?
Suppose we write the following inside of test_script.py
:
sys.exit(-992340374290374)
Мы получаем следующее сообщение об ошибке:
"[drive_letter]:\[path to python.exe]" [drive_letter]:/[path to script]
Process finished with exit code -1
-1
не является -992340374290374
, Что случилось?
2 ответа
От sys.exit
документы (выделено мое):
Выход из Python. Это реализуется путем вызова исключения SystemExit, поэтому выполняются действия по очистке, указанные в предложениях finally для операторов try, и можно перехватить попытку выхода на внешнем уровне.
Необязательный аргумент arg может быть целым числом, указывающим статус выхода (по умолчанию равен нулю), или объектом другого типа. Если это целое число, ноль считается "успешным завершением", а любое ненулевое значение считается "ненормальным завершением" оболочками и т.п. Большинство систем требуют, чтобы он находился в диапазоне 0–127, и в противном случае дают неопределенные результаты. Некоторые системы имеют соглашение о назначении определенных значений определенным кодам выхода, но они, как правило, недостаточно развиты; Программы Unix обычно используют 2 для ошибок синтаксиса командной строки и 1 для всех других видов ошибок. Если передается объект другого типа, None эквивалентен передаче нуля, а любой другой объект печатается в stderr и приводит к коду выхода 1. В частности, sys.exit("некоторое сообщение об ошибке") - это быстрый способ выйти из программы при возникновении ошибки.
Это связано с тем, как ваша операционная система обрабатывает выход. В документации для sys.exit
это говорит:
Большинство систем требуют, чтобы он находился в диапазоне 0–127, и в противном случае дают неопределенные результаты.