파이썬에서 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.