Merged revisions 78826 via svnmerge from

svn+ssh://pythondev@svn.python.org/python/trunk

........
  r78826 | victor.stinner | 2010-03-10 23:30:19 +0100 (mer., 10 mars 2010) | 5 lines

  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:
Victor Stinner 2010-03-12 14:45:56 +00:00
parent 2743139031
commit 52f6dd7a3d
6 changed files with 50 additions and 32 deletions

View file

@ -489,11 +489,12 @@ def execsitecustomize():
pass
except Exception as err:
if os.environ.get("PYTHONVERBOSE"):
raise
sys.stderr.write(
"Error in sitecustomize; set PYTHONVERBOSE for traceback:\n"
"%s: %s\n" %
(err.__class__.__name__, err))
sys.excepthook(*sys.exc_info())
else:
sys.stderr.write(
"Error in sitecustomize; set PYTHONVERBOSE for traceback:\n"
"%s: %s\n" %
(err.__class__.__name__, err))
def execusercustomize():
@ -502,6 +503,14 @@ def execusercustomize():
import usercustomize
except ImportError:
pass
except Exception as err:
if os.environ.get("PYTHONVERBOSE"):
sys.excepthook(*sys.exc_info())
else:
sys.stderr.write(
"Error in usercustomize; set PYTHONVERBOSE for traceback:\n"
"%s: %s\n" %
(err.__class__.__name__, err))
def main():

View file

@ -12,6 +12,11 @@ What's New in Python 3.2 Alpha 1?
Core and Builtins
-----------------
- 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.
- Issue #7173: Generator finalization could invalidate sys.exc_info().
- Issue #7544: Preallocate thread memory before creating the thread to avoid

View file

@ -595,10 +595,16 @@ Py_Main(int argc, wchar_t **argv)
else
p_cfilename = "<decoding error>";
}
sts = PyRun_AnyFileExFlags(
fp,
p_cfilename,
filename != NULL, &cf) != 0;
/* call pending calls like signal handlers (SIGINT) */
if (Py_MakePendingCalls() == -1) {
PyErr_Print();
sts = 1;
} else {
sts = PyRun_AnyFileExFlags(
fp,
p_cfilename,
filename != NULL, &cf) != 0;
}
Py_XDECREF(filenameObj);
}

View file

@ -1242,21 +1242,28 @@ indenterror(struct tok_state *tok)
}
#ifdef PGEN
#define verify_identifier(s,e) 1
#define verify_identifier(tok) 1
#else
/* Verify that the identifier follows PEP 3131. */
static int
verify_identifier(char *start, char *end)
verify_identifier(struct tok_state *tok)
{
PyObject *s;
int result;
s = PyUnicode_DecodeUTF8(start, end-start, NULL);
s = PyUnicode_DecodeUTF8(tok->start, tok->cur - tok->start, NULL);
if (s == NULL) {
PyErr_Clear();
if (PyErr_ExceptionMatches(PyExc_UnicodeDecodeError)) {
PyErr_Clear();
tok->done = E_IDENTIFIER;
} else {
tok->done = E_ERROR;
}
return 0;
}
result = PyUnicode_IsIdentifier(s);
Py_DECREF(s);
if (result == 0)
tok->done = E_IDENTIFIER;
return result;
}
#endif
@ -1405,7 +1412,7 @@ tok_get(register struct tok_state *tok, char **p_start, char **p_end)
}
tok_backup(tok, c);
if (nonascii &&
!verify_identifier(tok->start, tok->cur)) {
!verify_identifier(tok)) {
tok->done = E_IDENTIFIER;
return ERRORTOKEN;
}

View file

@ -2774,8 +2774,6 @@ PyImport_Import(PyObject *module_name)
}
else {
/* No globals -- use standard builtins, and fake globals */
PyErr_Clear();
builtins = PyImport_ImportModuleLevel("builtins",
NULL, NULL, NULL, 0);
if (builtins == NULL)

View file

@ -296,13 +296,14 @@ Py_InitializeEx(int install_sigs)
if (initstdio() < 0)
Py_FatalError(
"Py_Initialize: can't initialize sys standard streams");
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 */
}
void
@ -711,22 +712,12 @@ initmain(void)
static void
initsite(void)
{
PyObject *m, *f;
PyObject *m;
m = PyImport_ImportModule("site");
if (m == NULL) {
f = PySys_GetObject("stderr");
if (f == NULL || f == Py_None)
return;
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);
@ -1907,6 +1898,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)