Выход из командной строки python
чтобы выйти из командной строки Python, я должен ввести exit(). Если я наберу exit, он говорит
Use exit() or Ctrl-Z plus Return to exit
обычно при вводе exit, вы хотите выйти из программы. Почему интерпретатор дает мне вышеуказанную ошибку, когда он знает, что я пытаюсь выйти из командной строки? Почему бы ему просто не выйти? Я знаю, что это не имеет значения, и это глупый вопрос, но мне любопытно.
10 ответов:
при вводе
exitв командной строке, он находит переменную с таким именем и называет__repr__(или__str__) на нем. Обычно, вы получите результат, как:<function exit at 0x00B97FB0>но они решили переопределить эту функцию для
exitобъект для отображения полезного сообщения вместо этого. Является ли это глупым поведением или нет, это субъективный вопрос, но одна из возможных причин, по которой он не "просто выходит":Предположим, вы смотрите на какой-то код в отладчике, для экземпляр, и один из объектов ссылается на
Я рекомендую вам выйти из интерпретатора Python с помощью Ctrl-D. Это старый код ASCII для конца файла или конца передачи.
это сообщение на
exitпосмотрите на эти примеры :
1
>>> print exit Use exit() or Ctrl-D (i.e. EOF) to exit2
>>> 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'
поскольку интерпретатор не является оболочкой, в которой вы предоставляете команды, это - ну - интерпретатор. То, что вы даете ему код на Python.
синтаксис Python таков, что
exitсамо по себе не может быть никем иным, кроме названия объекта. Простое обращение к объекту не может фактически ничего сделать (кроме того, что обычно делает цикл read-eval-print; т. е. отображать строковое представление объекта).
в моем интерпретаторе python
exitна самом деле строка, а не функция --'Use Ctrl-D (i.e. EOF) to exit.'. Вы можете проверить переводчика, введяtype(exit)в активном python происходит то, что exit является функцией. Если вы не вызываете функцию, она выведет строковое представление объекта. Это поведение по умолчанию для любого возвращаемого объекта. Просто дизайнеры подумали, что люди могут попытаться ввести exit, чтобы выйти из интерпретатора, поэтому они сделали строку представление функции выхода полезное сообщение. Вы можете проверить это поведение, введя
str(exit)или дажеprint exit.
вы можете это исправить.
ссылке
PYTHONSTARTUPв файл python со следующим# Make exit work as expected type(exit).__repr__ = type(exit).__call__
как это работает?
командная строка python представляет собой цикл чтения-оценки-печати, то есть при вводе текста он будет читать этот текст, оценивать его и в конечном итоге печатать результат.
при вводе
exit()он вычисляет вызываемый объект типаsite.Quitterи называет его__call__функция, которая выходит из системы. При вводе текстаexitон вычисляет один и тот же вызываемый объект, не вызывая его, объект печатается, который в свою очередь вызывает__repr__на объект.мы можем воспользоваться этим путем связывания
__repr__до__call__и таким образом получить ожидаемое поведение выхода из sustem, даже когда мы вводимexitбез скобок.
Если вы застряли в командной строке python и ни одно из вышеперечисленных решений не сработало для вас, попробуй
exit(2)
"exit" - это допустимое имя переменной, которое можно использовать в вашей программе Python. Вы не хотите выходить из интерпретатора, когда вы просто пытаетесь увидеть значение этой переменной.

Comments