[Python-checkins] r78826 - in python/trunk: Lib/site.py Misc/NEWS Modules/main.c Parser/tokenizer.c Python/import.c Python/pythonrun.c

Brett Cannon brett at python.org
Thu Mar 11 21:55:28 CET 2010


Are you planning to forward-port this to py3k, Victor?

On Wed, Mar 10, 2010 at 14:30, victor.stinner <python-checkins at python.org>wrote:

> Author: victor.stinner
> Date: Wed Mar 10 23:30:19 2010
> New Revision: 78826
>
> Log:
> 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.
>
>
> Modified:
>   python/trunk/Lib/site.py
>   python/trunk/Misc/NEWS
>   python/trunk/Modules/main.c
>   python/trunk/Parser/tokenizer.c
>   python/trunk/Python/import.c
>   python/trunk/Python/pythonrun.c
>
> Modified: python/trunk/Lib/site.py
>
> ==============================================================================
> --- python/trunk/Lib/site.py    (original)
> +++ python/trunk/Lib/site.py    Wed Mar 10 23:30:19 2010
> @@ -489,6 +489,12 @@
>         import sitecustomize
>     except ImportError:
>         pass
> +    except Exception:
> +        if sys.flags.verbose:
> +            sys.excepthook(*sys.exc_info())
> +        else:
> +            print >>sys.stderr, \
> +                "'import sitecustomize' failed; use -v for traceback"
>
>
>  def execusercustomize():
> @@ -497,6 +503,12 @@
>         import usercustomize
>     except ImportError:
>         pass
> +    except Exception:
> +        if sys.flags.verbose:
> +            sys.excepthook(*sys.exc_info())
> +        else:
> +            print>>sys.stderr, \
> +                "'import sitecustomize' failed; use -v for traceback"
>
>
>  def main():
>
> Modified: python/trunk/Misc/NEWS
>
> ==============================================================================
> --- python/trunk/Misc/NEWS      (original)
> +++ python/trunk/Misc/NEWS      Wed Mar 10 23:30:19 2010
> @@ -12,6 +12,11 @@
>  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.
> +
>  Library
>  -------
>
>
> Modified: python/trunk/Modules/main.c
>
> ==============================================================================
> --- python/trunk/Modules/main.c (original)
> +++ python/trunk/Modules/main.c Wed Mar 10 23:30:19 2010
> @@ -573,10 +573,16 @@
>                }
>
>                if (sts==-1) {
> -                       sts = PyRun_AnyFileExFlags(
> -                               fp,
> -                               filename == NULL ? "<stdin>" : 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 ? "<stdin>" :
> filename,
> +                                       filename != NULL, &cf) != 0;
> +                       }
>                }
>
>        }
>
> Modified: python/trunk/Parser/tokenizer.c
>
> ==============================================================================
> --- python/trunk/Parser/tokenizer.c     (original)
> +++ python/trunk/Parser/tokenizer.c     Wed Mar 10 23:30:19 2010
> @@ -817,8 +817,12 @@
>        return -1;
>
>  error_clear:
> -       /* Fallback to iso-8859-1: for backward compatibility */
>        Py_DECREF(enc);
> +       if (!PyErr_ExceptionMatches(PyExc_UnicodeDecodeError)) {
> +               tok->done = E_ERROR;
> +               return -1;
> +       }
> +       /* Fallback to iso-8859-1: for backward compatibility */
>        PyErr_Clear();
>        return 0;
>  }
>
> Modified: python/trunk/Python/import.c
>
> ==============================================================================
> --- python/trunk/Python/import.c        (original)
> +++ python/trunk/Python/import.c        Wed Mar 10 23:30:19 2010
> @@ -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)
>
> Modified: python/trunk/Python/pythonrun.c
>
> ==============================================================================
> --- python/trunk/Python/pythonrun.c     (original)
> +++ python/trunk/Python/pythonrun.c     Wed Mar 10 23:30:19 2010
> @@ -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)
> _______________________________________________
> Python-checkins mailing list
> Python-checkins at python.org
> http://mail.python.org/mailman/listinfo/python-checkins
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-checkins/attachments/20100311/9c532306/attachment-0001.html>


More information about the Python-checkins mailing list