2016-03-30 14 views

Odpowiedz

7

Według Python/sysmodule.c nie podnosząc SystemExit to wszystko robi.

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

Jak widać w kodzie źródłowym https://github.com/python-git/python/blob/715a6e5035bb21ac49382772076ec4c630d6e960/Python/sysmodule.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; 
} 

to podnieść tylko SystemExit ani niczego innego

+0

dziękuję :) przy okazji, jeśli klikniesz numer linii na github, otrzymasz link do tego, np. https://github.com/python-git/python/blob/715a6e5035bb21ac49382772076ec4c630d6e960/Python/sysmodule.c#L207 –

3

Tak, podnosząc SystemExit i nazywając sys.exit są funkcjonalnie równoważne. See sys module source.

Funkcja PyErr_SetObject to sposób, w jaki CPython implementuje podniesienie wyjątku Pythona.

+0

dziękuję - zauważ, że podczas łączenia z określonymi liniami w kodzie github, zaleca się najpierw nacisnąć 'y' aby uzyskać kanoniczny adres URL dla zatwierdzenia, w którym aktualnie jesteś, np dziś https://github.com/python/cpython/blob/2ef4bc37aa5e05910fbdfe7b804a8a5855d87652/Python/sysmodule.c#L262 - przyszłe zatwierdzenia mogą poważnie zmienić linię –

+0

dzięki edycji Tobias. – tom

Powiązane problemy