]> granicus.if.org Git - python/commitdiff
clearer error messages for apply() and "no locals"
authorJeremy Hylton <jeremy@alum.mit.edu>
Fri, 19 Jan 2001 03:25:05 +0000 (03:25 +0000)
committerJeremy Hylton <jeremy@alum.mit.edu>
Fri, 19 Jan 2001 03:25:05 +0000 (03:25 +0000)
Python/bltinmodule.c
Python/ceval.c

index ca9f3124ae93464134d8f34eaa459b435a52e5fe..66372da252832e0079792f36acfa8c870e39f503 100644 (file)
@@ -70,8 +70,9 @@ builtin_apply(PyObject *self, PyObject *args)
        if (alist != NULL) {
                if (!PyTuple_Check(alist)) {
                        if (!PySequence_Check(alist)) {
-                               PyErr_SetString(PyExc_TypeError,
-                                   "apply() arg 2 must be a sequence");
+                               PyErr_Format(PyExc_TypeError,
+                                    "apply() arg 2 expect sequence, found %s",
+                                            alist->ob_type->tp_name);
                                return NULL;
                        }
                        t = PySequence_Tuple(alist);
@@ -81,8 +82,9 @@ builtin_apply(PyObject *self, PyObject *args)
                }
        }
        if (kwdict != NULL && !PyDict_Check(kwdict)) {
-               PyErr_SetString(PyExc_TypeError,
-                          "apply() arg 3 must be a dictionary");
+               PyErr_Format(PyExc_TypeError,
+                            "apply() arg 3 expected dictionary, found %s",
+                            kwdict->ob_type->tp_name);
                goto finally;
        }
        retval = PyEval_CallObjectWithKeywords(func, alist, kwdict);
index c01e16dba437ca4f8ff2e43791e19bde37586ea1..199272c4f57c699965aaa395a5b7684ab11d3a9b 100644 (file)
@@ -20,6 +20,8 @@
 
 #include <ctype.h>
 
+#define REPR(O) PyString_AS_STRING(PyObject_Repr(O))
+
 /* Turn this on if your compiler chokes on the big switch: */
 /* #define CASE_TOO_BIG 1 */
 
@@ -1438,8 +1440,9 @@ eval_code2(PyCodeObject *co, PyObject *globals, PyObject *locals,
                        w = GETNAMEV(oparg);
                        v = POP();
                        if ((x = f->f_locals) == NULL) {
-                               PyErr_SetString(PyExc_SystemError,
-                                               "no locals");
+                               PyErr_Format(PyExc_SystemError,
+                                            "no locals found when storing %s",
+                                            REPR(w));
                                break;
                        }
                        err = PyDict_SetItem(x, w, v);
@@ -1449,8 +1452,9 @@ eval_code2(PyCodeObject *co, PyObject *globals, PyObject *locals,
                case DELETE_NAME:
                        w = GETNAMEV(oparg);
                        if ((x = f->f_locals) == NULL) {
-                               PyErr_SetString(PyExc_SystemError,
-                                               "no locals");
+                               PyErr_Format(PyExc_SystemError,
+                                            "no locals when deleting %s",
+                                            REPR(w));
                                break;
                        }
                        if ((err = PyDict_DelItem(x, w)) != 0)
@@ -1543,8 +1547,9 @@ eval_code2(PyCodeObject *co, PyObject *globals, PyObject *locals,
                case LOAD_NAME:
                        w = GETNAMEV(oparg);
                        if ((x = f->f_locals) == NULL) {
-                               PyErr_SetString(PyExc_SystemError,
-                                               "no locals");
+                               PyErr_Format(PyExc_SystemError,
+                                            "no locals when loading %s",
+                                            REPR(w));
                                break;
                        }
                        x = PyDict_GetItem(x, w);
@@ -1716,7 +1721,7 @@ eval_code2(PyCodeObject *co, PyObject *globals, PyObject *locals,
                        PyFrame_FastToLocals(f);
                        if ((x = f->f_locals) == NULL) {
                                PyErr_SetString(PyExc_SystemError,
-                                               "no locals");
+                                       "no locals found during 'import *'");
                                break;
                        }
                        err = import_all_from(x, v);