파이썬에서 exit ()와 sys.exit ()의 차이점


409

파이썬에서,이 두 가지 유사한 이름의 함수는, exit()sys.exit(). 차이점은 무엇이며 언제 다른 것을 사용해야합니까?

답변:


471

exit대화식 쉘의 도우미입니다- sys.exit프로그램에서 사용하기위한 것입니다.

site합니다 (있는 경우를 제외하고, 시작시 자동으로 가져온 모듈 -S명령 줄 옵션이 주어)가 내장 된 네임 스페이스에 여러 상수를 추가합니다 (예를 exit) . 대화식 인터프리터 쉘에 유용하며 프로그램에서 사용해서는 안됩니다 .


기술적으로 그들은 주로 같은 일을 SystemExit합니다. sysmodule.csys.exit 에서 그렇게합니다 :

static PyObject *
sys_exit(PyObject *self, PyObject *args)
{
    PyObject *exit_code = 0;
    if (!PyArg_UnpackTuple(args, "exit", 0, 1, &exit_code))
        return NULL;
    /* Raise SystemExit so callers may catch it or clean up. */
    PyErr_SetObject(PyExc_SystemExit, exit_code);
   return NULL;
}

while exit은 각각 site.py_sitebuiltins.py에 정의되어 있습니다.

class Quitter(object):
    def __init__(self, name):
        self.name = name
    def __repr__(self):
        return 'Use %s() or %s to exit' % (self.name, eof)
    def __call__(self, code=None):
        # Shells like IDLE catch the SystemExit, but listen when their
        # stdin wrapper is closed.
        try:
            sys.stdin.close()
        except:
            pass
        raise SystemExit(code)
__builtin__.quit = Quitter('quit')
__builtin__.exit = Quitter('exit')

정리 처리기, 플러시 stdio 버퍼 등을 호출하지 않고 종료되는 os._exit 와 같은 세 번째 종료 옵션 이 있습니다 (일반적으로 a 이후 자식 프로세스에서만 사용해야 함 fork()).


4
사람들이 프로그램 노트에 사용해서는 안되기 때문에 exit (main ())이 일반적인 관용구라고 생각 합니다. -S사용 하지 않으면 잘 작동합니다 . 함께 사용할 수있는 방법 -S은을 지정하는 것 from sys import *입니다.
nobar

5
@nobar, true,하지만 실제로 사용하고 싶지 않습니다 from module import *.
miku

@EvgeniSergeev, 정확히 무엇을 요구하는지 잘 모르겠습니다. 그 자체로는 흥미로운 질문 일 수 있습니다.
miku

"with 문"내에서 세 가지 종료 함수를 사용하는 데 어떤 문제가 있는지 확인하려면이 답변에 추가하면 좋을 것입니다.
DevPlayer

32

내가 사용하는 경우 exit()코드와 쉘에서 실행, 내가 프로그램을 죽이거나하지할지 여부를 묻는 메시지가 표시됩니다. 정말 혼란 스럽습니다. 여기를 봐

그러나이 sys.exit()경우 더 좋습니다. 프로그램을 닫고 대화 상자를 만들지 않습니다.


2
대화식 쉘에서 사용하도록 설계 되었기 때문입니다. 따라서 대화 상자를 원하더라도 sys.exit()프로그램 내부 에서 사용해야합니다.
TheTechRobo36414519
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.