]> granicus.if.org Git - python/commitdiff
Partial backport of r78826: leave import site error handler unchanged (print
authorVictor Stinner <victor.stinner@haypocalc.com>
Sun, 21 Mar 2010 14:02:32 +0000 (14:02 +0000)
committerVictor Stinner <victor.stinner@haypocalc.com>
Sun, 21 Mar 2010 14:02:32 +0000 (14:02 +0000)
the error and continue).

Merged revisions 78826-78827 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.
........
  r78827 | victor.stinner | 2010-03-10 23:45:04 +0100 (mer., 10 mars 2010) | 4 lines

  ooops, fix error message in execusercustomize()

  Copy/paste failure :-)
........

Lib/site.py
Modules/main.c
Parser/tokenizer.c
Python/import.c
Python/pythonrun.c

index 21c7db24dbe25bd305c18d1683caa1eae0c46671..66c56c2813dd9dbfa262801d5af07d49e146ad6f 100644 (file)
@@ -472,6 +472,12 @@ def execsitecustomize():
         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():
@@ -480,6 +486,12 @@ def execusercustomize():
         import usercustomize
     except ImportError:
         pass
+    except Exception:
+        if sys.flags.verbose:
+            sys.excepthook(*sys.exc_info())
+        else:
+            print>>sys.stderr, \
+                "'import usercustomize' failed; use -v for traceback"
 
 
 def main():
index 2d2bbf4fc171c77ffa32db69234d67d9db854224..de0c8513ee6b6e21e788f1352db8a0cdb96f5a43 100644 (file)
@@ -569,10 +569,16 @@ Py_Main(int argc, char **argv)
                }
 
                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;
+                       }
                }
                
        }
index 79f1fa814329787885a5d490f5b2f253f146b30f..b84a15437e48c30e1fda636d727bf5f760356410 100644 (file)
@@ -764,8 +764,12 @@ error_nomem:
        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;
 }
index 43eabb830bdf4c8d540f2953651e438aae295cb7..eb731d060c3c3b76b5a51cb06c1da5fb074b801d 100644 (file)
@@ -2744,8 +2744,6 @@ PyImport_Import(PyObject *module_name)
        }
        else {
                /* No globals -- use standard builtins, and fake globals */
-               PyErr_Clear();
-
                builtins = PyImport_ImportModuleLevel("__builtin__",
                                                      NULL, NULL, NULL, 0);
                if (builtins == NULL)
index f0dcfb382b1a3f1900c2e996230fa43ae0ada91b..3ea4d8c7849a42825c71d9ff965e3225654c2392 100644 (file)
@@ -245,14 +245,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;
@@ -281,8 +282,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;
@@ -1543,6 +1549,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)