mirror of
https://github.com/python/cpython.git
synced 2025-07-27 13:14:41 +00:00
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.
This commit is contained in:
parent
e9e07bf5c9
commit
6664426d7c
6 changed files with 48 additions and 23 deletions
|
@ -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)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue