Merged revisions 78872 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/py3k ................ r78872 | victor.stinner | 2010-03-12 15:45:56 +0100 (ven., 12 mars 2010) | 12 lines 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:
parent
b531bfba4e
commit
ffbc2f63e1
19
Lib/site.py
19
Lib/site.py
|
@ -474,11 +474,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():
|
||||
|
@ -487,6 +488,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():
|
||||
|
|
|
@ -25,6 +25,11 @@ What's New in Python 3.1.2?
|
|||
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().
|
||||
|
||||
Library
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -1187,21 +1187,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
|
||||
|
@ -1350,7 +1357,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;
|
||||
}
|
||||
|
|
|
@ -2777,8 +2777,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)
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue