파이썬 명령 줄을 끝내려면 exit ()를 입력해야합니다. exit를 입력하면
Use exit() or Ctrl-Z plus Return to exit
일반적으로을 입력 exit
하면 프로그램을 종료하려고합니다. 명령 줄을 종료하려고 할 때 인터프리터에서 왜 위의 오류가 발생합니까? 왜 그냥 종료되지 않습니까? 나는 그것이 중요하지 않고 어리석은 질문이라는 것을 알고 있지만 궁금합니다.
파이썬 명령 줄을 끝내려면 exit ()를 입력해야합니다. exit를 입력하면
Use exit() or Ctrl-Z plus Return to exit
일반적으로을 입력 exit
하면 프로그램을 종료하려고합니다. 명령 줄을 종료하려고 할 때 인터프리터에서 왜 위의 오류가 발생합니까? 왜 그냥 종료되지 않습니까? 나는 그것이 중요하지 않고 어리석은 질문이라는 것을 알고 있지만 궁금합니다.
답변:
내 파이썬에서 인터프리터 exit
는 실제로 문자열이며 함수가 아닙니다 'Use Ctrl-D (i.e. EOF) to exit.'
. 다음을 입력하여 통역사를 확인할 수 있습니다type(exit)
활성 파이썬에서 일어나고있는 일은 exit가 함수라는 것입니다. 함수를 호출하지 않으면 객체의 문자열 표현이 인쇄됩니다. 이것은 반환 된 객체의 기본 동작입니다. 디자이너가 사람들이 인터프리터를 종료하기 위해 exit를 입력하려고 시도한다고 생각했기 때문에 exit 함수의 문자열 표현을 유용한 메시지로 만들었습니다. 당신은 입력하여이 동작을 확인할 수 있습니다 str(exit)
또는 print exit
.
이것은 파이썬 프롬프트에서 나오는 가장 좋은 방법입니다.
출구()
exit()
작동 한다는 것을 알고 있으며 왜 exit
Parens가 없는지 작동하지 않는 이유를 알고 싶습니다 . 따라서이 답변은 질문의 일부를 반복하며 실제로 대답하지는 않습니다.
exit
명령 행에 입력하면 해당 이름의 변수를 찾은 다음 해당 변수를 호출 __repr__
(또는 __str__
)합니다. 일반적으로 다음과 같은 결과가 나타납니다.
<function exit at 0x00B97FB0>
그러나 그들은 exit
객체가 유용한 메시지를 대신 표시 하도록 해당 기능을 재정의하기로 결정했습니다 . 그것이 멍청한 행동인지 아닌지에 대한 주관적인 질문이지만 그것이 "그냥 나가지 않는"한 가지 가능한 이유는 다음과 같습니다.
예를 들어 디버거에서 일부 코드를보고 있고 객체 중 하나가 exit
함수를 참조한다고 가정합니다 . 디버거가 __repr__
해당 개체 를 호출 하여 해당 기능을 표시 하려고 하면 프로그램이 갑자기 중지됩니다! 실제로 예상치 못한 일이 발생하고 이에 대응하기위한 조치가 더 복잡해질 수 있습니다 (예 : 명령 행으로 해당 동작을 제한하더라도 exit
속성 이있는 객체를 인쇄하려고하면 어떻게됩니까?)
import sys
사용자가 아니면 sys.exit ()를 호출하여 인터프리터를 종료 하지 않는 한 범위 내에 있지 않습니다 .
로 파이썬 인터프리터를 종료하는 것이 좋습니다 Ctrl-D. 파일 끝 또는 전송 끝의 이전 ASCII 코드입니다.
Ctrl-Break
Windows에서 일관되게 작동합니다. Ctrl-D
또는 Ctrl-Z
Python 2.7, 3.4, 3.6을 위해 Windows에서 일했습니다. 그러나 파이썬 3.7에서는 이것들이 작동을 멈추었고 가장 짧은 ASCII 시퀀스는 Ctrl-Z
Enter
입니다.
고칠 수 있습니다.
PYTHONSTARTUP
다음을 사용하여 파이썬 파일에 연결
# Make exit work as expected
type(exit).__repr__ = type(exit).__call__
이것은 어떻게 작동합니까?
python 명령 행은 read-evaluate-print-loop입니다. 즉, 텍스트를 입력 할 때 해당 텍스트를 읽고 평가하여 결과를 인쇄합니다.
입력 exit()
하면 호출 가능한 유형의 객체로 평가되고 site.Quitter
해당 __call__
기능을 호출 하여 시스템을 종료합니다. 입력 exit
하면 동일한 호출 가능한 객체로 평가되며 호출하지 않고 객체가 인쇄되어 호출됩니다.__repr__
합니다.
우리는 연결하여 활용할 수 __repr__
에 __call__
따라서 경우에도 우리는 입력 시스템을 종료의 예상 행동을 얻을 exit
괄호없이합니다.
exit
"유용한"문자열 을 인쇄 하려고 노력 했지만 자연스럽게 행하고 인터프리터를 종료하기 위해 바인딩 할 수는 없었습니다. 매번 괄호를 입력해야한다는 것은 실망스러운 일입니다. 이 답변은 완벽하며 대신 받아 들여 져야합니다.
()
마지막에 호출되는 방식과 관련이있을 수도 있습니다. 그렇지 않으면 변수 일 수도 있고 일종의 객체 일 수도 있습니다.