Відповіді:
Дозвольте дати трохи інформації про них:
quit()просто піднімає SystemExitвиняток.
Крім того, якщо ви надрукуєте його, воно видасть повідомлення:
>>> print (quit)
Use quit() or Ctrl-Z plus Return to exit
>>>
Ця функціональність була включена, щоб допомогти людям, які не знають Python. Зрештою, набирає одну з найбільш вірогідних речей, яку новачок спробує вийти з Python quit.
Проте, quitслід НЕ використовуватися у виробництві код. Це тому, що він працює лише в тому випадку, якщо siteмодуль завантажений. Натомість цю функцію слід використовувати лише в перекладачі.
exit()є псевдонімом quit(або навпаки). Вони існують разом, щоб зробити Python більш зручним для користувачів.
Крім того, він також надсилає повідомлення при друкуванні:
>>> print (exit)
Use exit() or Ctrl-Z plus Return to exit
>>>
Однак, як quit, exitвважається, погано використовувати у виробничому коді і має бути зарезервоване для використання в інтерпретаторі. Це тому, що він теж покладається на siteмодуль.
sys.exit()також викликає SystemExitвиняток. Це означає, що це те саме, що quitі exitв цьому відношенні.
На відміну від цих двох, однак, sys.exitвважається хорошим для використання у виробничому коді. Це тому, що sysмодуль завжди буде там.
os._exit()виходить з програми, не викликаючи оброблювачів очищення, промиваючи буфери stdio тощо . Таким чином, це не стандартний спосіб виходу, і його слід застосовувати лише в особливих випадках. Найпоширеніша з них - у дочірніх процесах, створених os.fork.
Зауважте, що з чотирьох наведених методів, лише цей є унікальним у тому, що він робить.
Підводячи підсумок, усі чотири методи виходять із програми. Однак перші два вважаються поганими для використання у виробничому коді, а останній - нестандартний, брудний спосіб, який використовується лише у спеціальних сценаріях. Отже, якщо ви хочете , щоб вийти з програми , як правило, йдуть з третім способом: sys.exit.
Або, ще краще, на мою думку, ви можете просто безпосередньо робити те, що sys.exitвідбувається за лаштунками та бігати:
raise SystemExit
Таким чином, вам не потрібно спочатку імпортувати sys.
Однак цей вибір просто один із стилів та залежить лише від вас.
quitа exitпокинути оболонку поки sys.exitнемає.
sys.exit()не є надійним способом закрити. Якщо він викликається всередині потоку, він завершить лише цей потік, якщо він не знаходиться в основному потоці. Це може призвести до безлічі випадків, коли програма триває, тому що виклик не був у основній нитці, тим більше, що деякі інтерпретатори будуть непомітно виконувати виклики.
endкоманди, яка б raise SystemExit. Не бачите, чому не може бути чогось такого простого, як у BASIC.
printбуло змінено з оператора на функцію. Синтаксис легко додати, але в цьому є вартість складності.
sys.exit()?
Функції * quit() , exit()і sys.exit()функціонують однаково: вони піднімають SystemExitвиняток. Таким чином , немає ніякої різниці, за винятком того, що sys.exit()завжди доступний , але exit()і quit()доступні тільки якщо siteмодуль імпортується.
os._exit()Функція є особливим, він виходить відразу , не викликаючи яких - або функцій очищення (НЕ виштовхнути буфери, наприклад). Це розроблено для вузькоспеціалізованих випадків використання ... в основному, лише у дитини після os.fork()дзвінка.
Використовуйте exit()або quit()у відповідь.
Використовуйте sys.exit()в сценаріях або, raise SystemExit()якщо вам зручніше.
Використовуйте os._exit()для дочірніх процесів для виходу після дзвінка на os.fork().
Все це можна викликати без аргументів, або ви можете вказати статус виходу, наприклад, exit(1)або raise SystemExit(1)вийти зі статусом 1. Зверніть увагу, що портативні програми обмежені кодами статусу виходу в діапазоні 0-255, якщо ви використовуєте raise SystemExit(256)в багатьох системах це отримаєте усічення, і ваш процес фактично вийде зі статусом 0.
* Насправді quit()і exit()є об'єктами екземпляра, які можна викликати, але я думаю, що це нормально називати їх функціями.
os._exit():
exit(0):
exit(1):
sys.exit():
quit():
В основному всі вони роблять те саме, однак це також залежить від того, для чого ви це робите.
Я не думаю, що ви нічого не залишили, і я б рекомендував звикнути quit()або exit().
Ви б використовували sys.exit()і в os._exit()основному, якщо ви використовуєте великі файли або використовуєте python для управління терміналом.
В іншому випадку в основному використовують exit()або quit().
sys.exit є канонічним способом виходу.
Внутрішньо sys.exitпросто піднімає SystemExit. Однак дзвінок sys.exitє більш ідіоматичним, ніж підняття SystemExitбезпосередньо.
os.exit - це системний дзвінок низького рівня, який виходить безпосередньо без виклику будь-яких оброблювачів очищення.
quitі exitіснують лише для того, щоб забезпечити простий вихід із підказки Python. Це для нових користувачів або користувачів, які випадково увійшли в запит Python і не хочуть знати правильний синтаксис. Вони, ймовірно, намагаються друкувати exitабо quit. Хоча це не вийде з перекладача, він принаймні видає повідомлення, яке вказує їм вихід:
>>> exit
Use exit() or Ctrl-D (i.e. EOF) to exit
>>> exit()
$
Це по суті лише хак, який використовує той факт, що інтерпретатор друкує __repr__будь-яке вираження, яке ви вводите під час запиту.
os.abort()