Index: Python/pythonrun.c =================================================================== --- Python/pythonrun.c (révision 78770) +++ Python/pythonrun.c (copie de travail) @@ -248,14 +248,15 @@ } 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 @@ 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 @@ 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 @@ char *msg = NULL; errtype = PyExc_SyntaxError; switch (err->error) { + case E_ERROR: + return; case E_SYNTAX: errtype = PyExc_IndentationError; if (err->expected == INDENT) Index: Python/import.c =================================================================== --- Python/import.c (révision 78770) +++ Python/import.c (copie de travail) @@ -2748,8 +2748,6 @@ } else { /* No globals -- use standard builtins, and fake globals */ - PyErr_Clear(); - builtins = PyImport_ImportModuleLevel("__builtin__", NULL, NULL, NULL, 0); if (builtins == NULL) Index: Parser/tokenizer.c =================================================================== --- Parser/tokenizer.c (révision 78770) +++ Parser/tokenizer.c (copie de travail) @@ -817,8 +817,12 @@ return -1; error_clear: + Py_DECREF(enc); + if (!PyErr_ExceptionMatches(PyExc_UnicodeDecodeError)) { + tok->done = E_ERROR; + return -1; + } /* Fallback to iso-8859-1: for backward compatibility */ - Py_DECREF(enc); PyErr_Clear(); return 0; } Index: Modules/main.c =================================================================== --- Modules/main.c (révision 78770) +++ Modules/main.c (copie de travail) @@ -573,10 +573,16 @@ } if (sts==-1) { - sts = PyRun_AnyFileExFlags( - fp, - filename == NULL ? "" : filename, - filename != NULL, &cf) != 0; + /* call pending calls like signal handlers (SIGINT) */ + if (Py_MakePendingCalls() == -1) { + PyErr_Print(); + sts = 1; + } else { + sts = PyRun_AnyFileExFlags( + fp, + filename == NULL ? "" : filename, + filename != NULL, &cf) != 0; + } } }