Вихід із командного рядка python


152

Щоб вийти з командного рядка Python, я повинен набрати exit (). Якщо я набираю вихід, він говорить

Use exit() or Ctrl-Z plus Return to exit

Зазвичай під час введення exitпотрібно вийти з програми. Чому інтерпретатор видає мені вказану вище помилку, коли знає, що я намагаюся вийти з командного рядка? Чому він просто не виходить? Я знаю, що це не має значення, і це дурне питання, але мені цікаво.


Це може бути пов'язане з тим, як часто викликаються функції ()в кінці ... в іншому випадку це може бути (можливо) змінною ... або якимось об'єктом ...
summea

правильно, але перекладач знає, що я намагаюся вийти, і тому друкує це повідомлення. інакше було б надруковано повідомлення про помилку. Якщо він знає, що я намагаюся вийти, він може просто вийти.
Енк

1
вихід або вихід () видає помилку для мене приблизно 20% установок, які я знайшов у світі ... Тільки CTRL + Z + return послідовно працює.
Пауло Карвальо

Відповіді:


37

У моєму інтерпретаторі python exit- це насправді рядок, а не функція - 'Use Ctrl-D (i.e. EOF) to exit.'. Ви можете перевірити свого перекладача, ввівшиtype(exit)

В активному пітоні відбувається те, що вихід є функцією. Якщо ви не зателефонуєте до функції, вона роздрукує рядкове представлення об'єкта. Це поведінка за замовчуванням для будь-якого повернутого об'єкта. Просто дизайнери подумали, що люди можуть спробувати ввести exit для виходу з інтерпретатора, тому вони зробили рядовий подання функції виходу корисним повідомленням. Ви можете перевірити цю поведінку, ввівши str(exit)або навіть print exit.


14
Ctrl-Z - це те, що ви робите в Windows (ну DOS), де ви б робили Ctrl-D для Unix-подібних систем.
Карл Кнечтел

@KarlKnechtel Ах, добре знати. У мене мало досвіду програмування на Windows.
Дюни

60

Це працює для мене, найкращий спосіб вийти з підказки python.

вихід()


4
Я розгублений у цій відповіді ... в самому питанні сказано, що вони вже знають, що exit()працює, і хочуть знати, чому exitбез паронів не виходить. Отже, ця відповідь просто повторює частину питання і насправді не відповідає на нього.
Бен Лі

Мені хотілося б оскаржити цю відповідь, щоб не читати питання, але я вважаю, що для більшості установок python це правильно; це просто те, що користувач сказав, що це не працює в їхньому випадку, тому рекомендувати це здається ... неправильним.
особа27

37

Коли ви вводите exitкомандний рядок, він знаходить змінну з цим ім'ям і викликає __repr__(або __str__) на ній. Зазвичай ви отримуєте такий результат, як:

<function exit at 0x00B97FB0>

Але вони вирішили переглянути цю функцію для exitоб'єкта, щоб відобразити корисне повідомлення. Це дурна поведінка чи ні, це суб'єктивне питання, але одна з можливих причин, чому вона не "просто виходить", це:

Припустимо, ви шукаєте, наприклад, якийсь код у відладчику, і один із об'єктів посилається на exitфункцію. Коли налагоджувач намагається зателефонувати __repr__на цей об’єкт, щоб відобразити цю функцію вам, програма раптово припиняється! Це було б дійсно несподівано, і заходи протидії, які могли б ще більше ускладнити речі (наприклад, навіть якщо ви обмежите цю поведінку командним рядком, що робити, якщо ви спробуєте надрукувати якийсь об’єкт, який має exitатрибут?)


4
У цьому випадку реальна функція виходу навіть не входить у сферу застосування, якщо ви не отримаєте import sys, після чого ви викличете sys.exit () для виходу з інтерпретатора.
Майкл Діллон

19

Це повідомлення є __str__атрибутомexit

подивіться на ці приклади:

1

>>> print exit
Use exit() or Ctrl-D (i.e. EOF) to exit

2

>>> exit.__str__()
'Use exit() or Ctrl-D (i.e. EOF) to exit'

3

>>> getattr(exit, '__str__')()
'Use exit() or Ctrl-D (i.e. EOF) to exit'

19

Я рекомендую вийти із інтерпретатора Python за допомогою Ctrl-D. Це старий код ASCII для кінця файлу або закінчення передачі.


Здається, цей метод не працює, якщо скрипт зіткнувся з помилкою.
blaylockbk

2
Ctrl-Breakпрацює стабільно в Windows. Ctrl-Dабо Ctrl-Zпрацювали в Windows для Python 2.7, 3.4, 3.6. Але в Python 3.7 вони перестали працювати, і найкоротша ASCII послідовність, що виходить, є Ctrl-Z Enter.
Боб Штейн

14

З використанням Anaconda 4.5+ та Python 3.6+ для Windows

Ctrl+Z

або

exit()

У деяких випадках, можливо, доведеться використовувати

Ctrl+Break

Якщо ваш комп'ютер не має Breakключа, дивіться тут .


8

Оскільки інтерпретатор - це не оболонка, де ви надаєте команди, це - добре - інтерпретатор. Те, що ви їй надаєте, - це Python-код.

Синтаксис Python такий, що exitсам по собі не може бути нічим іншим, як іменем об'єкта. Просто посилання на об'єкт насправді нічого не може зробити (крім того, що зазвичай робить цикл read-eval-print; тобто відображати рядкове представлення об'єкта).


6

Ви можете це виправити.

Посилання PYTHONSTARTUPна файл python із наступним

# Make exit work as expected
type(exit).__repr__ = type(exit).__call__

Як це працює?

Командний рядок python - це цикл читання-оцінка-друк, тобто під час введення тексту він прочитає цей текст, оцінить його та, зрештою, надрукує результат.

Під час введення exit()він оцінює об'єкт типу, що site.Quitterвикликається, і викликає його __call__функцію, яка виходить із системи. При введенні exitвін оцінює той самий об'єкт, що викликається, без його виклику надрукується об'єкт, який у свою чергу викликає __repr__об'єкт.

Ми можемо скористатися цим шляхом зв'язування __repr__з __call__і , таким чином , отримати очікувану поведінку на виході з системи , навіть коли ми набираємо exitбез дужок.


4
Вони доклали зусиль, щоб exitнадрукувати «корисну» рядок, але вони не могли просто прив’язати її до природної речі та вийти з перекладача. Примушувати кожного разу вводити круглі дужки - це засмучує. Ця відповідь ідеальна і замість неї повинна бути прийнятою.
Пшемек Д

3

Щоб вийти з терміналу Python , просто виконайте:

exit()

Зверніть увагу, це функція, яка викликає, як більшість користувачів змішують її з виходом без виклику, але новий термінал Pyhton показує повідомлення ...

або як ярлик натисніть:

Ctrl + D

на клавіатурі ...

ctrl + D


1
Все, що ви сказали, вже висвітлено у відповідях вище.
Пшемек Д

0

Якщо ви застрягли в командному рядку python і жодне з перерахованих вище рішень не працювало для вас, спробуйте exit(2)


-1

"exit" - дійсне ім'я змінної, яке можна використовувати у вашій програмі Python. Ви не хочете виходити з інтерпретатора, коли ви просто намагаєтесь побачити значення цієї змінної.


За винятком випадків, коли ви призначаєте їх exit, ви переміняєте цей символ, і exit()він більше не працює. Хоча цей символ є дійсним ім'ям змінної, використовувати його таким чином не здається дуже хорошою практикою.
Przemek D
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.