본문 바로가기
Python/Python FAQ

Python에서 exit()와 sys.exit()의 차이점, Difference between exit() and sys.exit() in Python

by 베타코드 2023. 10. 11.
반응형

질문


파이썬에서는 두 개의 비슷한 이름을 가진 함수, exit()sys.exit()가 있습니다. 두 함수의 차이점은 무엇이며, 어떤 경우에 한 함수를 다른 함수 대신 사용해야 할까요?


답변


exit는 대화형 셸의 도우미입니다 - sys.exit는 프로그램에서 사용하기 위해 설계되었습니다.

site 모듈(시작시 자동으로 가져오지만 -S 명령줄 옵션이 제공되는 경우 제외)은 내장된 네임스페이스에 여러 상수를 추가합니다 (예: exit). 대화형 인터프리터 셸에서 유용하며 프로그램에서 사용해서는 안됩니다.


기술적으로, 그들은 대부분 동일한 작업을 수행합니다: SystemExit를 발생시킵니다. sys.exitsysmodule.c에서 이를 수행합니다:

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;
}

반면, 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 버퍼를 플러시하는 등의 작업을 수행하지 않고 종료하는 세 번째 종료 옵션이 있습니다 (fork() 이후에 일반적으로 자식 프로세스에서만 사용해야 함).

반응형

댓글