diff options
author | Victor Stinner <victor.stinner@haypocalc.com> | 2010-03-10 22:30:19 (GMT) |
---|---|---|
committer | Victor Stinner <victor.stinner@haypocalc.com> | 2010-03-10 22:30:19 (GMT) |
commit | 6664426d7cdb63b88d973a731cc442ecba10047a (patch) | |
tree | 7c809077569e93086eb42e1e29eea8fb5c6eb582 /Python | |
parent | e9e07bf5c988bdfe4158d3ac14b25312430f1bd0 (diff) | |
download | cpython-6664426d7cdb63b88d973a731cc442ecba10047a.zip cpython-6664426d7cdb63b88d973a731cc442ecba10047a.tar.gz cpython-6664426d7cdb63b88d973a731cc442ecba10047a.tar.bz2 |
Issue #3137: Don't ignore errors at startup, especially a keyboard interrupt
(SIGINT). If an error occurs while importing the site module, the error is
printed and Python exits. Initialize the GIL before importing the site
module.
Diffstat (limited to 'Python')
-rw-r--r-- | Python/import.c | 2 | ||||
-rw-r--r-- | Python/pythonrun.c | 32 |
2 files changed, 16 insertions, 18 deletions
diff --git a/Python/import.c b/Python/import.c index eb50bc5..bcdd68e 100644 --- a/Python/import.c +++ b/Python/import.c @@ -2748,8 +2748,6 @@ PyImport_Import(PyObject *module_name) } else { /* No globals -- use standard builtins, and fake globals */ - PyErr_Clear(); - builtins = PyImport_ImportModuleLevel("__builtin__", NULL, NULL, NULL, 0); if (builtins == NULL) diff --git a/Python/pythonrun.c b/Python/pythonrun.c index 4f8417a..ada1481 100644 --- a/Python/pythonrun.c +++ b/Python/pythonrun.c @@ -248,14 +248,15 @@ Py_InitializeEx(int install_sigs) } initmain(); /* Module __main__ */ - if (!Py_NoSiteFlag) - initsite(); /* Module site */ /* auto-thread-state API, if available */ #ifdef WITH_THREAD _PyGILState_Init(interp, tstate); #endif /* WITH_THREAD */ + if (!Py_NoSiteFlag) + initsite(); /* Module site */ + if ((p = Py_GETENV("PYTHONIOENCODING")) && *p != '\0') { p = icodeset = codeset = strdup(p); free_codeset = 1; @@ -284,8 +285,13 @@ Py_InitializeEx(int install_sigs) loc_codeset = strdup(loc_codeset); Py_DECREF(enc); } else { - loc_codeset = NULL; - PyErr_Clear(); + if (PyErr_ExceptionMatches(PyExc_LookupError)) { + PyErr_Clear(); + loc_codeset = NULL; + } else { + PyErr_Print(); + exit(1); + } } } else loc_codeset = NULL; @@ -704,20 +710,12 @@ initmain(void) static void initsite(void) { - PyObject *m, *f; + PyObject *m; m = PyImport_ImportModule("site"); if (m == NULL) { - f = PySys_GetObject("stderr"); - if (Py_VerboseFlag) { - PyFile_WriteString( - "'import site' failed; traceback:\n", f); - PyErr_Print(); - } - else { - PyFile_WriteString( - "'import site' failed; use -v for traceback\n", f); - PyErr_Clear(); - } + PyErr_Print(); + Py_Finalize(); + exit(1); } else { Py_DECREF(m); @@ -1546,6 +1544,8 @@ err_input(perrdetail *err) char *msg = NULL; errtype = PyExc_SyntaxError; switch (err->error) { + case E_ERROR: + return; case E_SYNTAX: errtype = PyExc_IndentationError; if (err->expected == INDENT) |