]> granicus.if.org Git - python/commitdiff
Ka-Ping Yee <ping@lfw.org>:
authorFred Drake <fdrake@acm.org>
Tue, 24 Oct 2000 19:57:45 +0000 (19:57 +0000)
committerFred Drake <fdrake@acm.org>
Tue, 24 Oct 2000 19:57:45 +0000 (19:57 +0000)
Changes to error messages to increase consistency & clarity.

This (mostly) closes SourceForge patch #101839.

16 files changed:
Lib/test/output/test_extcall
Modules/dbmmodule.c
Modules/parsermodule.c
Modules/posixmodule.c
Objects/classobject.c
Objects/fileobject.c
Objects/floatobject.c
Objects/intobject.c
Objects/longobject.c
Objects/moduleobject.c
Objects/object.c
Objects/stringobject.c
Python/bltinmodule.c
Python/ceval.c
Python/errors.c
Python/exceptions.c

index 209ded7f347cad7c78067a0dc771a8444dc36031..9f4ba43d836d828921d80c655458797216c79905 100644 (file)
@@ -9,9 +9,9 @@ test_extcall
 (1, 2, 3) {'b': 5, 'a': 4}
 (1, 2, 3, 4, 5) {'b': 7, 'a': 6}
 (1, 2, 3, 6, 7) {'y': 5, 'b': 9, 'x': 4, 'a': 8}
-TypeError: not enough arguments; expected 1, got 0
-TypeError: not enough arguments; expected 1, got 0
-TypeError: not enough arguments; expected 1, got 0
+TypeError: not enough arguments to g(); expected 1, got 0
+TypeError: not enough arguments to g(); expected 1, got 0
+TypeError: not enough arguments to g(); expected 1, got 0
 1 () {}
 1 (2,) {}
 1 (2, 3) {}
@@ -20,10 +20,10 @@ TypeError: not enough arguments; expected 1, got 0
 1 () {'d': 4, 'b': 2, 'c': 3, 'a': 1}
 {'b': 2, 'c': 3, 'a': 1}
 {'b': 2, 'c': 3, 'a': 1}
-keyword parameter redefined: x
-keyword parameter redefined: b
+keyword parameter 'x' redefined in call to g()
+keyword parameter 'b' redefined in function call
 keywords must be strings
-unexpected keyword argument: e
+h() got an unexpected keyword argument 'e'
 * argument must be a sequence
 ** argument must be a dictionary
 3 512 1
index 7e16d9b1e03ed9b25de476d1214eced98a89d1ef..684736460b20a5d06a680a7099ab0db3fa72be71 100644 (file)
@@ -140,7 +140,7 @@ dbm_ass_sub(dbmobject *dp, PyObject *v, PyObject *w)
                if ( dbm_store(dp->di_dbm, krec, drec, DBM_REPLACE) < 0 ) {
                        dbm_clearerr(dp->di_dbm);
                        PyErr_SetString(DbmError,
-                                       "Cannot add item to database");
+                                       "cannot add item to database");
                        return -1;
                }
        }
@@ -255,7 +255,7 @@ dbm_setdefault(register dbmobject *dp, PyObject *args)
        val.dsize = PyString_GET_SIZE(defvalue);
        if (dbm_store(dp->di_dbm, key, val, DBM_INSERT) < 0) {
                dbm_clearerr(dp->di_dbm);
-               PyErr_SetString(DbmError, "Cannot add item to database");
+               PyErr_SetString(DbmError, "cannot add item to database");
                return NULL;
        }
        return defvalue;
@@ -325,7 +325,7 @@ dbmopen(PyObject *self, PyObject *args)
                iflags = O_RDWR|O_CREAT|O_TRUNC;
        else {
                PyErr_SetString(DbmError,
-                               "Flags should be one of 'r', 'w', 'c' or 'n'");
+                               "arg 2 to open should be 'r', 'w', 'c', or 'n'");
                return NULL;
        }
         return newdbmobject(name, iflags, mode);
index 3ffe69395e36beeb42333b3c40426177b9ec7c6e..e6e145673df4de3df1dc908c481a97b04bf990e6 100644 (file)
@@ -508,7 +508,7 @@ parser_do_parse(PyObject *args, PyObject *kw, char *argspec, int type)
         if (n != 0)
             res = parser_newastobject(n, type);
         else
-            err_string("Could not parse string.");
+            err_string("could not parse string");
     }
     return (res);
 }
@@ -611,14 +611,14 @@ parser_tuple2ast(PyAST_Object *self, PyObject *args, PyObject *kw)
         else {
             /*  This is a fragment, at best. */
             PyNode_Free(tree);
-            err_string("Parse tree does not use a valid start symbol.");
+            err_string("parse tree does not use a valid start symbol");
         }
     }
     /*  Make sure we throw an exception on all errors.  We should never
      *  get this, but we'd do well to be sure something is done.
      */
     if ((ast == 0) && !PyErr_Occurred())
-        err_string("Unspecified ast error occurred.");
+        err_string("unspecified AST error occurred");
 
     return (ast);
 }
@@ -670,7 +670,7 @@ build_node_children(PyObject *tuple, node *root, int *line_num)
             PyObject *temp;
 
             if ((len != 2) && (len != 3)) {
-                err_string("Terminal nodes must have 2 or 3 entries.");
+                err_string("terminal nodes must have 2 or 3 entries");
                 return 0;
             }
             temp = PySequence_GetItem(elem, 1);
@@ -678,8 +678,8 @@ build_node_children(PyObject *tuple, node *root, int *line_num)
                 return 0;
             if (!PyString_Check(temp)) {
                 PyErr_Format(parser_error,
-                             "Second item in terminal node must be a string,"
-                             " found %s.",
+                             "second item in terminal node must be a string,"
+                             " found %s",
                              ((PyTypeObject*)PyObject_Type(temp))->tp_name);
                 Py_DECREF(temp);
                 return 0;
@@ -691,8 +691,8 @@ build_node_children(PyObject *tuple, node *root, int *line_num)
                         *line_num = PyInt_AS_LONG(o);
                     else {
                         PyErr_Format(parser_error,
-                                     "Third item in terminal node must be an"
-                                     " integer, found %s.",
+                                     "third item in terminal node must be an"
+                                     " integer, found %s",
                                 ((PyTypeObject*)PyObject_Type(temp))->tp_name);
                         Py_DECREF(o);
                         Py_DECREF(temp);
@@ -713,7 +713,7 @@ build_node_children(PyObject *tuple, node *root, int *line_num)
              *  Throw an exception.
              */
             PyErr_SetObject(parser_error,
-                            Py_BuildValue("os", elem, "Unknown node type."));
+                            Py_BuildValue("os", elem, "unknown node type."));
             Py_XDECREF(elem);
             return (0);
         }
@@ -1566,7 +1566,7 @@ validate_dotted_as_name(node *tree)
                    && validate_name(CHILD(tree, 2), NULL));
         else {
             res = 0;
-            err_string("Illegal number of children for dotted_as_name.");
+            err_string("illegal number of children for dotted_as_name");
         }
     }
     return res;
@@ -1655,7 +1655,7 @@ validate_exec_stmt(node *tree)
                && validate_expr(CHILD(tree, 1)));
 
     if (!res && !PyErr_Occurred())
-        err_string("Illegal exec statement.");
+        err_string("illegal exec statement");
     if (res && (nch > 2))
         res = (validate_name(CHILD(tree, 2), "in")
                && validate_test(CHILD(tree, 3)));
@@ -1682,7 +1682,7 @@ validate_assert_stmt(node *tree)
                && validate_test(CHILD(tree, 1)));
 
     if (!res && !PyErr_Occurred())
-        err_string("Illegal assert statement.");
+        err_string("illegal assert statement");
     if (res && (nch > 2))
         res = (validate_comma(CHILD(tree, 2))
                && validate_test(CHILD(tree, 3)));
@@ -1778,7 +1778,7 @@ validate_try(node *tree)
                 res = ((strcmp(STR(CHILD(tree, pos)), "except") == 0)
                        || (strcmp(STR(CHILD(tree, pos)), "else") == 0));
                 if (!res)
-                    err_string("Illegal trailing triple in try statement.");
+                    err_string("illegal trailing triple in try statement");
             }
             else if (nch == (pos + 6)) {
                 res = (validate_name(CHILD(tree, pos), "except")
@@ -1912,11 +1912,11 @@ validate_comp_op(node *tree)
                      || (strcmp(STR(tree), "is") == 0));
               if (!res) {
                   PyErr_Format(parser_error,
-                               "Illegal operator: '%s'.", STR(tree));
+                               "illegal operator '%s'", STR(tree));
               }
               break;
           default:
-              err_string("Illegal comparison operator type.");
+              err_string("illegal comparison operator type");
               break;
         }
     }
@@ -1928,7 +1928,7 @@ validate_comp_op(node *tree)
                    || ((strcmp(STR(CHILD(tree, 0)), "not") == 0)
                        && (strcmp(STR(CHILD(tree, 1)), "in") == 0))));
         if (!res && !PyErr_Occurred())
-            err_string("Unknown comparison operator.");
+            err_string("unknown comparison operator");
     }
     return (res);
 }
@@ -2075,7 +2075,7 @@ validate_power(node *tree)
         res = validate_trailer(CHILD(tree, pos++));
     if (res && (pos < nch)) {
         if (!is_even(nch - pos)) {
-            err_string("Illegal number of nodes for 'power'.");
+            err_string("illegal number of nodes for 'power'");
             return (0);
         }
         for ( ; res && (pos < (nch - 1)); pos += 2)
@@ -2532,7 +2532,7 @@ validate_node(node *tree)
             if (res)
                 next = CHILD(tree, 0);
             else if (nch == 1)
-                err_string("Illegal flow_stmt type.");
+                err_string("illegal flow_stmt type");
             break;
             /*
              *  Compound statements.
@@ -2654,7 +2654,7 @@ validate_node(node *tree)
 
           default:
             /* Hopefully never reached! */
-            err_string("Unrecogniged node type.");
+            err_string("unrecognized node type");
             res = 0;
             break;
         }
@@ -2670,7 +2670,7 @@ validate_expr_tree(node *tree)
     int res = validate_eval_input(tree);
 
     if (!res && !PyErr_Occurred())
-        err_string("Could not validate expression tuple.");
+        err_string("could not validate expression tuple");
 
     return (res);
 }
@@ -2698,7 +2698,7 @@ validate_file_input(node *tree)
      *  this, we have some debugging to do.
      */
     if (!res && !PyErr_Occurred())
-        err_string("VALIDATION FAILURE: report this to the maintainer!.");
+        err_string("VALIDATION FAILURE: report this to the maintainer!");
 
     return (res);
 }
index 8544f6a9415153e85d4fd39e9ddfcf23353c901f..a2251b1df8fde728175b66de7c03bdbdc3e61f6c 100644 (file)
@@ -1226,7 +1226,7 @@ posix_utime(PyObject *self, PyObject *args)
        }
        else if (!PyArg_Parse(arg, "(ll)", &atime, &mtime)) {
                PyErr_SetString(PyExc_TypeError,
-                             "Second argument must be a 2-tuple of numbers.");
+                               "utime() arg 2 must be a tuple (atime, mtime)");
                return NULL;
        }
        else {
@@ -1294,12 +1294,12 @@ posix_execv(PyObject *self, PyObject *args)
                getitem = PyTuple_GetItem;
        }
        else {
-               PyErr_SetString(PyExc_TypeError, "argv must be tuple or list");
+               PyErr_SetString(PyExc_TypeError, "execv() arg 2 must be a tuple or list");
                return NULL;
        }
 
        if (argc == 0) {
-               PyErr_SetString(PyExc_ValueError, "empty argument list");
+               PyErr_SetString(PyExc_ValueError, "execv() arg 2 must not be empty");
                return NULL;
        }
 
@@ -1310,7 +1310,7 @@ posix_execv(PyObject *self, PyObject *args)
                if (!PyArg_Parse((*getitem)(argv, i), "s", &argvlist[i])) {
                        PyMem_DEL(argvlist);
                        PyErr_SetString(PyExc_TypeError, 
-                                       "all arguments must be strings");
+                                       "execv() arg 2 must contain only strings");
                        return NULL;
                        
                }
@@ -1364,17 +1364,17 @@ posix_execve(PyObject *self, PyObject *args)
                getitem = PyTuple_GetItem;
        }
        else {
-               PyErr_SetString(PyExc_TypeError, "argv must be tuple or list");
+               PyErr_SetString(PyExc_TypeError, "execve() arg 2 must be a tuple or list");
                return NULL;
        }
        if (!PyMapping_Check(env)) {
-               PyErr_SetString(PyExc_TypeError, "env must be mapping object");
+               PyErr_SetString(PyExc_TypeError, "execve() arg 3 must be a mapping object");
                return NULL;
        }
 
        if (argc == 0) {
                PyErr_SetString(PyExc_ValueError, 
-                               "empty argument list");
+                               "execve() arg 2 must not be empty");
                return NULL;
        }
 
@@ -1385,7 +1385,7 @@ posix_execve(PyObject *self, PyObject *args)
        }
        for (i = 0; i < argc; i++) {
                if (!PyArg_Parse((*getitem)(argv, i),
-                                "s;argv must be list of strings",
+                                "s;execve() arg 2 must contain only strings",
                                 &argvlist[i]))
                {
                        goto fail_1;
@@ -1413,8 +1413,8 @@ posix_execve(PyObject *self, PyObject *args)
                if (!key || !val)
                        goto fail_2;
                
-               if (!PyArg_Parse(key, "s;non-string key in env", &k) ||
-                   !PyArg_Parse(val, "s;non-string value in env", &v))
+               if (!PyArg_Parse(key, "s;execve() arg 3 contains a non-string key", &k) ||
+                   !PyArg_Parse(val, "s;execve() arg 3 contains a non-string value", &v))
                {
                        goto fail_2;
                }
@@ -1493,7 +1493,7 @@ posix_spawnv(PyObject *self, PyObject *args)
                getitem = PyTuple_GetItem;
        }
        else {
-               PyErr_SetString(PyExc_TypeError, "argv must be tuple or list");
+               PyErr_SetString(PyExc_TypeError, "spawmv() arg 2 must be a tuple or list");
                return NULL;
        }
 
@@ -1504,7 +1504,7 @@ posix_spawnv(PyObject *self, PyObject *args)
                if (!PyArg_Parse((*getitem)(argv, i), "s", &argvlist[i])) {
                        PyMem_DEL(argvlist);
                        PyErr_SetString(PyExc_TypeError, 
-                                       "all arguments must be strings");
+                                       "spawnv() arg 2 must contain only strings");
                        return NULL;
                }
        }
@@ -1563,11 +1563,11 @@ posix_spawnve(PyObject *self, PyObject *args)
                getitem = PyTuple_GetItem;
        }
        else {
-               PyErr_SetString(PyExc_TypeError, "argv must be tuple or list");
+               PyErr_SetString(PyExc_TypeError, "spawnve() arg 2 must be a tuple or list");
                return NULL;
        }
        if (!PyMapping_Check(env)) {
-               PyErr_SetString(PyExc_TypeError, "env must be mapping object");
+               PyErr_SetString(PyExc_TypeError, "spawnve() arg 3 must be a mapping object");
                return NULL;
        }
 
@@ -1578,7 +1578,7 @@ posix_spawnve(PyObject *self, PyObject *args)
        }
        for (i = 0; i < argc; i++) {
                if (!PyArg_Parse((*getitem)(argv, i),
-                                "s;argv must be list of strings",
+                                "s;spawnve() arg 2 must contain only strings",
                                 &argvlist[i]))
                {
                        goto fail_1;
@@ -1606,8 +1606,8 @@ posix_spawnve(PyObject *self, PyObject *args)
                if (!key || !val)
                        goto fail_2;
                
-               if (!PyArg_Parse(key, "s;non-string key in env", &k) ||
-                   !PyArg_Parse(val, "s;non-string value in env", &v))
+               if (!PyArg_Parse(key, "s;spawnve() arg 3 contains a non-string key", &k) ||
+                   !PyArg_Parse(val, "s;spawnve() arg 3 contains a non-string value", &v))
                {
                        goto fail_2;
                }
@@ -2150,13 +2150,13 @@ posix_popen(PyObject *self, PyObject *args)
        if (*mode == 'r')
                tm = _O_RDONLY;
        else if (*mode != 'w') {
-               PyErr_SetString(PyExc_ValueError, "mode must be 'r' or 'w'");
+               PyErr_SetString(PyExc_ValueError, "popen() arg 2 must be 'r' or 'w'");
                return NULL;
        } else
                tm = _O_WRONLY;
         
        if (bufsize != -1) {
-               PyErr_SetString(PyExc_ValueError, "bufsize must be -1");
+               PyErr_SetString(PyExc_ValueError, "popen() arg 3 must be -1");
                return NULL;
        }
 
@@ -2191,13 +2191,13 @@ win32_popen2(PyObject *self, PyObject  *args)
        if (*mode == 't')
                tm = _O_TEXT;
        else if (*mode != 'b') {
-               PyErr_SetString(PyExc_ValueError, "mode must be 't' or 'b'");
+               PyErr_SetString(PyExc_ValueError, "popen2() arg 2 must be 't' or 'b'");
                return NULL;
        } else
                tm = _O_BINARY;
   
        if (bufsize != -1) {
-               PyErr_SetString(PyExc_ValueError, "bufsize must be -1");
+               PyErr_SetString(PyExc_ValueError, "popen2() arg 3 must be -1");
                return NULL;
        }
 
@@ -2228,13 +2228,13 @@ win32_popen3(PyObject *self, PyObject *args)
        if (*mode == 't')
                tm = _O_TEXT;
        else if (*mode != 'b') {
-               PyErr_SetString(PyExc_ValueError, "mode must be 't' or 'b'");
+               PyErr_SetString(PyExc_ValueError, "popen3() arg 2 must be 't' or 'b'");
                return NULL;
        } else
                tm = _O_BINARY;
   
        if (bufsize != -1) {
-               PyErr_SetString(PyExc_ValueError, "bufsize must be -1");
+               PyErr_SetString(PyExc_ValueError, "popen3() arg 3 must be -1");
                return NULL;
        }
 
@@ -2265,13 +2265,13 @@ win32_popen4(PyObject *self, PyObject  *args)
        if (*mode == 't')
                tm = _O_TEXT;
        else if (*mode != 'b') {
-               PyErr_SetString(PyExc_ValueError, "mode must be 't' or 'b'");
+               PyErr_SetString(PyExc_ValueError, "popen4() arg 2 must be 't' or 'b'");
                return NULL;
        } else
                tm = _O_BINARY;
 
        if (bufsize != -1) {
-               PyErr_SetString(PyExc_ValueError, "bufsize must be -1");
+               PyErr_SetString(PyExc_ValueError, "popen4() arg 3 must be -1");
                return NULL;
        }
 
@@ -2727,13 +2727,13 @@ static int _PyPclose(FILE *file)
                 * an exception.  Just die.
                 */
                 Py_FatalError("unable to allocate interpreter state "
-                              "when closing popen object.");
+                              "when closing popen object");
                 return -1;  /* unreachable */
        }
        pThreadState = PyThreadState_New(pInterpreterState);
        if (!pThreadState) {
                 Py_FatalError("unable to allocate thread state "
-                              "when closing popen object.");
+                              "when closing popen object");
                 return -1;  /* unreachable */
        }
        /* Grab the global lock.  Note that this will deadlock if the
@@ -3761,7 +3761,7 @@ posix_strerror(PyObject *self, PyObject *args)
        message = strerror(code);
        if (message == NULL) {
                PyErr_SetString(PyExc_ValueError,
-                               "strerror code out of range");
+                               "strerror() argument out of range");
                return NULL;
        }
        return PyString_FromString(message);
index c362b800267c411e61cab5fc2a48d75b478eb6ed..1c9cd7ee3f75d434b88e92899c0f109f85088e40 100644 (file)
@@ -173,7 +173,9 @@ class_getattr(register PyClassObject *op, PyObject *name)
        }
        v = class_lookup(op, name, &class);
        if (v == NULL) {
-               PyErr_SetObject(PyExc_AttributeError, name);
+               PyErr_Format(PyExc_AttributeError,
+                            "class %.50s has no attribute '%.400s'",
+                            PyString_AS_STRING(op->cl_name), sname);
                return NULL;
        }
        Py_INCREF(v);
@@ -285,8 +287,9 @@ class_setattr(PyClassObject *op, PyObject *name, PyObject *v)
        if (v == NULL) {
                int rv = PyDict_DelItem(op->cl_dict, name);
                if (rv < 0)
-                       PyErr_SetString(PyExc_AttributeError,
-                                  "delete non-existing class attribute");
+                       PyErr_Format(PyExc_AttributeError,
+                                    "class %.50s has no attribute '%.400s'",
+                                    PyString_AS_STRING(op->cl_name), sname);
                return rv;
        }
        else
@@ -578,7 +581,8 @@ instance_getattr1(register PyInstanceObject *inst, PyObject *name)
        }
        v = instance_getattr2(inst, name);
        if (v == NULL) {
-               PyErr_Format(PyExc_AttributeError,"'%.50s' instance has no attribute '%.400s'",
+               PyErr_Format(PyExc_AttributeError,
+                            "%.50s instance has no attribute '%.400s'",
                             PyString_AS_STRING(inst->in_class->cl_name), sname);
        }
        return v;
@@ -642,8 +646,10 @@ instance_setattr1(PyInstanceObject *inst, PyObject *name, PyObject *v)
        if (v == NULL) {
                int rv = PyDict_DelItem(inst->in_dict, name);
                if (rv < 0)
-                       PyErr_SetString(PyExc_AttributeError,
-                                  "delete non-existing instance attribute");
+                       PyErr_Format(PyExc_AttributeError,
+                                    "%.50s instance has no attribute '%.400s'",
+                                    PyString_AS_STRING(inst->in_class->cl_name),
+                                    PyString_AS_STRING(name));
                return rv;
        }
        else
index b8b47f887adb12b5f83d91873a35a76d5ea69a42..94c5bb0a1e7b6586ca78f47cee065d7a3e2938e4 100644 (file)
@@ -833,7 +833,7 @@ file_readlines(PyFileObject *f, PyObject *args)
                        buffersize *= 2;
                        if (buffersize > INT_MAX) {
                                PyErr_SetString(PyExc_OverflowError,
-                                       "line is too long for a Python string");
+                                       "line is longer than a Python string can hold");
                                goto error;
                        }
                        if (big_buffer == NULL) {
@@ -938,7 +938,7 @@ file_writelines(PyFileObject *f, PyObject *args)
                return err_closed();
        if (args == NULL || !PySequence_Check(args)) {
                PyErr_SetString(PyExc_TypeError,
-                          "writelines() requires sequence of strings");
+                          "writelines() argument must be a sequence of strings");
                return NULL;
        }
        islist = PyList_Check(args);
@@ -1001,7 +1001,7 @@ file_writelines(PyFileObject *f, PyObject *args)
                                                           &buffer,
                                                           &len))) {
                                        PyErr_SetString(PyExc_TypeError,
-                               "writelines() requires sequences of strings");
+                               "writelines() argument must be a sequence of strings");
                                        goto error;
                                }
                                line = PyString_FromStringAndSize(buffer,
index d776147c85d32e5107486285166a6e5cbd04502d..b58c7fd494f9f30658375c2ab5c707a972b0a952 100644 (file)
@@ -466,7 +466,7 @@ float_pow(PyFloatObject *v, PyObject *w, PyFloatObject *z)
        if (iv == 0.0) {
                if (iw < 0.0) {
                        PyErr_SetString(PyExc_ZeroDivisionError,
-                                  "0.0 to a negative power");
+                                       "0.0 cannot be raised to a negative power");
                        return NULL;
                }
                return PyFloat_FromDouble(0.0);
@@ -486,7 +486,7 @@ float_pow(PyFloatObject *v, PyObject *w, PyFloatObject *z)
                /* Sort out special cases here instead of relying on pow() */
                if (iv < 0.0) {
                        PyErr_SetString(PyExc_ValueError,
-                                  "negative number to a float power");
+                                       "negative number cannot be raised to a fractional power");
                        return NULL;
                }
                errno = 0;
index c9d1f6aeaf7ab736e89e053b8dd817d73b160363..18acf6b52baf5b02b910708b5a2c60069147bf71 100644 (file)
@@ -171,7 +171,7 @@ PyInt_FromString(char *s, char **pend, int base)
        char buffer[256]; /* For errors */
 
        if ((base != 0 && base < 2) || base > 36) {
-               PyErr_SetString(PyExc_ValueError, "invalid base for int()");
+               PyErr_SetString(PyExc_ValueError, "int() base must be >= 2 and <= 36");
                return NULL;
        }
 
@@ -417,7 +417,7 @@ i_divmod(register PyIntObject *x, register PyIntObject *y,
        
        if (yi == 0) {
                PyErr_SetString(PyExc_ZeroDivisionError,
-                               "integer division or modulo");
+                               "integer division or modulo by zero");
                return -1;
        }
        if (yi < 0) {
@@ -485,17 +485,17 @@ int_pow(PyIntObject *v, PyIntObject *w, PyIntObject *z)
        if (iw < 0) {
                if (iv)
                        PyErr_SetString(PyExc_ValueError,
-                                       "integer to a negative power");
+                                       "cannot raise integer to a negative power");
                else
                        PyErr_SetString(PyExc_ZeroDivisionError,
-                                       "0 to a negative power");
+                                       "cannot raise 0 to a negative power");
                return NULL;
        }
        if ((PyObject *)z != Py_None) {
                iz = z->ob_ival;
                if (iz == 0) {
                        PyErr_SetString(PyExc_ValueError,
-                                       "pow(x, y, z) with z==0");
+                                       "pow() arg 3 cannot be 0");
                        return NULL;
                }
        }
index bfb431f53d6f4a9c4754e1bd5a1ef5d645485586..615d1d833709c5d077fd5f66cfb3eb072d8e3ded 100644 (file)
@@ -173,7 +173,7 @@ PyLong_AsLong(PyObject *vv)
 
  overflow:
        PyErr_SetString(PyExc_OverflowError,
-                       "long int too long to convert");
+                       "long int too large to convert");
        return -1;
 }
 
@@ -204,7 +204,7 @@ PyLong_AsUnsignedLong(PyObject *vv)
                x = (x << SHIFT) + v->ob_digit[i];
                if ((x >> SHIFT) != prev) {
                        PyErr_SetString(PyExc_OverflowError,
-                               "long int too long to convert");
+                               "long int too large to convert");
                        return (unsigned long) -1;
                }
        }
@@ -653,7 +653,7 @@ PyLong_FromString(char *str, char **pend, int base)
        
        if ((base != 0 && base < 2) || base > 36) {
                PyErr_SetString(PyExc_ValueError,
-                               "invalid base for long literal");
+                               "long() arg 2 must be >= 2 and <= 36");
                return NULL;
        }
        while (*str != '\0' && isspace(Py_CHARMASK(*str)))
@@ -751,7 +751,7 @@ long_divrem(PyLongObject *a, PyLongObject *b,
        
        if (size_b == 0) {
                PyErr_SetString(PyExc_ZeroDivisionError,
-                               "long division or modulo");
+                               "long division or modulo by zero");
                return -1;
        }
        if (size_a < size_b ||
index c655e957ef5e52bcaf797134c4b4d56dc689eeb2..4267896bf0241cc72cbd34296bb07cecbac726df 100644 (file)
@@ -163,13 +163,22 @@ static PyObject *
 module_getattr(PyModuleObject *m, char *name)
 {
        PyObject *res;
+       char* modname;
        if (strcmp(name, "__dict__") == 0) {
                Py_INCREF(m->md_dict);
                return m->md_dict;
        }
        res = PyDict_GetItemString(m->md_dict, name);
-       if (res == NULL)
-               PyErr_SetString(PyExc_AttributeError, name);
+       if (res == NULL) {
+               modname = PyModule_GetName((PyObject *)m);
+               if (modname == NULL) {
+                       PyErr_Clear();
+                       modname = "?";
+               }
+               PyErr_Format(PyExc_AttributeError,
+                            "'%.50s' module has no attribute '%.400s'",
+                            modname, name);
+       }
        else
                Py_INCREF(res);
        return res;
@@ -178,6 +187,7 @@ module_getattr(PyModuleObject *m, char *name)
 static int
 module_setattr(PyModuleObject *m, char *name, PyObject *v)
 {
+       char* modname;
        if (name[0] == '_' && strcmp(name, "__dict__") == 0) {
                PyErr_SetString(PyExc_TypeError,
                                "read-only special attribute");
@@ -185,9 +195,16 @@ module_setattr(PyModuleObject *m, char *name, PyObject *v)
        }
        if (v == NULL) {
                int rv = PyDict_DelItemString(m->md_dict, name);
-               if (rv < 0)
-                       PyErr_SetString(PyExc_AttributeError,
-                                  "delete non-existing module attribute");
+               if (rv < 0) {
+                       modname = PyModule_GetName((PyObject *)m);
+                       if (modname == NULL) {
+                               PyErr_Clear();
+                               modname = "?";
+                       }
+                       PyErr_Format(PyExc_AttributeError,
+                                    "'%.50s' module has no attribute '%.400s'",
+                                    modname, name);
+               }
                return rv;
        }
        else
index 9b7c551d85bcf153698a8b7f0784a54a600377fb..6f22c53769135174192ebb0247cc7ed794bc7261 100644 (file)
@@ -175,7 +175,7 @@ PyObject_Print(PyObject *op, FILE *fp, int flags)
                return -1;
 #ifdef USE_STACKCHECK
        if (PyOS_CheckStack()) {
-               PyErr_SetString(PyExc_MemoryError, "Stack overflow");
+               PyErr_SetString(PyExc_MemoryError, "stack overflow");
                return -1;
        }
 #endif
@@ -227,7 +227,7 @@ PyObject_Repr(PyObject *v)
                return NULL;
 #ifdef USE_STACKCHECK
        if (PyOS_CheckStack()) {
-               PyErr_SetString(PyExc_MemoryError, "Stack overflow");
+               PyErr_SetString(PyExc_MemoryError, "stack overflow");
                return NULL;
        }
 #endif
index dbade8ca795cbd02dc7b79079161bfbb6b08a809..757c1c4da4b9d17595d5ed2ad7d3c23722b740fb 100644 (file)
@@ -2460,7 +2460,7 @@ formatfloat(char *buf, size_t buflen, int flags,
           always given), therefore increase by one to 10+prec. */
        if (buflen <= (size_t)10 + (size_t)prec) {
                PyErr_SetString(PyExc_OverflowError,
-                       "formatted float is too long (precision too long?)");
+                       "formatted float is too long (precision too large?)");
                return -1;
        }
        sprintf(buf, fmt, x);
@@ -2626,7 +2626,7 @@ formatint(char *buf, size_t buflen, int flags,
           worst case buf = '0x' + [0-9]*prec, where prec >= 11 */
        if (buflen <= 13 || buflen <= (size_t)2 + (size_t)prec) {
                PyErr_SetString(PyExc_OverflowError,
-                       "formatted integer is too long (precision too long?)");
+                       "formatted integer is too long (precision too large?)");
                return -1;
        }
        sprintf(buf, fmt, x);
index 4ca1310be2133be3b81b0ed26ed8977ec26cd9b8..7c8cf187e3a7c0f5be29c4894485ae4a1ab62826 100644 (file)
@@ -71,7 +71,7 @@ builtin_apply(PyObject *self, PyObject *args)
                if (!PyTuple_Check(alist)) {
                        if (!PySequence_Check(alist)) {
                                PyErr_SetString(PyExc_TypeError,
-                                   "apply() 2nd argument must be a sequence");
+                                   "apply() arg 2 must be a sequence");
                                return NULL;
                        }
                        t = PySequence_Tuple(alist);
@@ -82,7 +82,7 @@ builtin_apply(PyObject *self, PyObject *args)
        }
        if (kwdict != NULL && !PyDict_Check(kwdict)) {
                PyErr_SetString(PyExc_TypeError,
-                          "apply() 3rd argument must be dictionary");
+                          "apply() arg 3 must be a dictionary");
                goto finally;
        }
        retval = PyEval_CallObjectWithKeywords(func, alist, kwdict);
@@ -181,7 +181,7 @@ builtin_filter(PyObject *self, PyObject *args)
        sqf = seq->ob_type->tp_as_sequence;
        if (sqf == NULL || sqf->sq_length == NULL || sqf->sq_item == NULL) {
                PyErr_SetString(PyExc_TypeError,
-                          "argument 2 to filter() must be a sequence type");
+                          "filter() arg 2 must be a sequence");
                goto Fail_2;
        }
 
@@ -368,7 +368,7 @@ builtin_compile(PyObject *self, PyObject *args)
                start = Py_single_input;
        else {
                PyErr_SetString(PyExc_ValueError,
-                  "compile() mode must be 'exec' or 'eval' or 'single'");
+                  "compile() arg 3 must be 'exec' or 'eval' or 'single'");
                return NULL;
        }
        return Py_CompileString(str, filename, start);
@@ -421,7 +421,7 @@ complex_from_string(PyObject *v)
        }
        else if (PyObject_AsCharBuffer(v, &s, &len)) {
                PyErr_SetString(PyExc_TypeError,
-                               "complex() needs a string first argument");
+                               "complex() arg is not a string");
                return NULL;
        }
 
@@ -431,7 +431,7 @@ complex_from_string(PyObject *v)
                s++;
        if (s[0] == '\0') {
                PyErr_SetString(PyExc_ValueError,
-                               "empty string for complex()");
+                               "complex() arg is an empty string");
                return NULL;
        }
 
@@ -445,7 +445,7 @@ complex_from_string(PyObject *v)
                        if (s-start != len) {
                                PyErr_SetString(
                                        PyExc_ValueError,
-                                       "null byte in argument for complex()");
+                                       "complex() arg contains a null byte");
                                return NULL;
                        }
                        if(!done) sw_error=1;
@@ -531,7 +531,7 @@ complex_from_string(PyObject *v)
 
        if (sw_error) {
                PyErr_SetString(PyExc_ValueError,
-                               "malformed string for complex()");
+                               "complex() arg is a malformed string");
                return NULL;
        }
 
@@ -557,7 +557,7 @@ builtin_complex(PyObject *self, PyObject *args)
             ((nbi = i->ob_type->tp_as_number) == NULL ||
              nbi->nb_float == NULL))) {
                PyErr_SetString(PyExc_TypeError,
-                          "complex() argument can't be converted to complex");
+                          "complex() arg can't be converted to complex");
                return NULL;
        }
        /* XXX Hack to support classes with __complex__ method */
@@ -748,7 +748,7 @@ builtin_eval(PyObject *self, PyObject *args)
        if (!PyString_Check(cmd) &&
            !PyUnicode_Check(cmd)) {
                PyErr_SetString(PyExc_TypeError,
-                          "eval() argument 1 must be string or code object");
+                          "eval() arg 1 must be a string or code object");
                return NULL;
        }
        if (PyString_AsStringAndSize(cmd, &str, NULL))
@@ -1224,7 +1224,7 @@ builtin_int(PyObject *self, PyObject *args)
                                         base);
        else {
                PyErr_SetString(PyExc_TypeError,
-                               "can't convert non-string with explicit base");
+                               "int() can't convert non-string with explicit base");
                return NULL;
        }
 }
@@ -1257,7 +1257,7 @@ builtin_long(PyObject *self, PyObject *args)
                                          base);
        else {
                PyErr_SetString(PyExc_TypeError,
-                               "can't convert non-string with explicit base");
+                               "long() can't convert non-string with explicit base");
                return NULL;
        }
 }
@@ -1384,7 +1384,7 @@ min_max(PyObject *args, int sign)
        sq = v->ob_type->tp_as_sequence;
        if (sq == NULL || sq->sq_item == NULL) {
                PyErr_SetString(PyExc_TypeError,
-                               "min() or max() of non-sequence");
+                               "min() or max() arg must be a sequence");
                return NULL;
        }
        w = NULL;
@@ -1417,7 +1417,7 @@ min_max(PyObject *args, int sign)
        }
        if (w == NULL)
                PyErr_SetString(PyExc_ValueError,
-                               "min() or max() of empty sequence");
+                               "min() or max() arg is an empty sequence");
        return w;
 }
 
@@ -1520,7 +1520,7 @@ builtin_ord(PyObject *self, PyObject *args)
                        ord = (long)*PyUnicode_AS_UNICODE(obj);
        } else {
                PyErr_Format(PyExc_TypeError,
-                            "expected string or Unicode character, " \
+                            "ord() expected string or Unicode character, " \
                             "%.200s found", obj->ob_type->tp_name);
                return NULL;
        }
@@ -1528,7 +1528,7 @@ builtin_ord(PyObject *self, PyObject *args)
                return PyInt_FromLong(ord);
 
        PyErr_Format(PyExc_TypeError, 
-                    "expected a character, length-%d string found",
+                    "ord() expected a character, length-%d string found",
                     size);
        return NULL;
 }
@@ -1607,7 +1607,7 @@ builtin_range(PyObject *self, PyObject *args)
                        return NULL;
        }
        if (istep == 0) {
-               PyErr_SetString(PyExc_ValueError, "zero step for range()");
+               PyErr_SetString(PyExc_ValueError, "range() arg 3 must not be zero");
                return NULL;
        }
        if (istep > 0)
@@ -1617,7 +1617,7 @@ builtin_range(PyObject *self, PyObject *args)
        n = (int)bign;
        if (bign < 0 || (long)n != bign) {
                PyErr_SetString(PyExc_OverflowError,
-                               "range() has too many items");
+                               "range() result has too many items");
                return NULL;
        }
        v = PyList_New(n);
@@ -1664,7 +1664,7 @@ builtin_xrange(PyObject *self, PyObject *args)
                        return NULL;
        }
        if (istep == 0) {
-               PyErr_SetString(PyExc_ValueError, "zero step for xrange()");
+               PyErr_SetString(PyExc_ValueError, "xrange() arg 3 must not be zero");
                return NULL;
        }
        if (istep > 0)
@@ -1673,7 +1673,7 @@ builtin_xrange(PyObject *self, PyObject *args)
                n = get_len_of_range(ihigh, ilow, -istep);
        if (n < 0) {
                PyErr_SetString(PyExc_OverflowError,
-                               "xrange() has more than sys.maxint items");
+                               "xrange() result has too many items");
                return NULL;
        }
        return PyRange_New(ilow, n, istep, 1);
@@ -1779,7 +1779,7 @@ builtin_reduce(PyObject *self, PyObject *args)
        sqf = seq->ob_type->tp_as_sequence;
        if (sqf == NULL || sqf->sq_item == NULL) {
                PyErr_SetString(PyExc_TypeError,
-                   "2nd argument to reduce() must be a sequence object");
+                   "reduce() arg 2 must be a sequence");
                return NULL;
        }
 
@@ -1817,7 +1817,7 @@ builtin_reduce(PyObject *self, PyObject *args)
 
        if (result == NULL)
                PyErr_SetString(PyExc_TypeError,
-                          "reduce of empty sequence with no initial value");
+                          "reduce() of empty sequence with no initial value");
 
        return result;
 
@@ -2073,7 +2073,7 @@ builtin_isinstance(PyObject *self, PyObject *args)
                if (icls != NULL) {
                        retval = abstract_issubclass(
                                icls, cls,
-                               "second argument must be a class", 
+                               "isinstance() arg 2 must be a class", 
                                1);
                        Py_DECREF(icls);
                        if (retval < 0)
@@ -2081,13 +2081,13 @@ builtin_isinstance(PyObject *self, PyObject *args)
                }
                else {
                        PyErr_SetString(PyExc_TypeError,
-                                       "second argument must be a class");
+                                       "isinstance() arg 2 must be a class");
                        return NULL;
                }
        }
         else {
                PyErr_SetString(PyExc_TypeError,
-                               "second argument must be a class");
+                               "isinstance() arg 2 must be a class");
                return NULL;
        }
        return PyInt_FromLong(retval);
@@ -2140,7 +2140,7 @@ builtin_zip(PyObject *self, PyObject *args)
 
        if (itemsize < 1) {
                PyErr_SetString(PyExc_TypeError,
-                               "at least one sequence is required");
+                               "zip() requires at least one sequence");
                return NULL;
        }
        /* args must be a tuple */
index a1c8190c752ce9404a446c2054505bbb27f6f949..df057b763c05c3e2213d65dd22e6230f91a435fd 100644 (file)
@@ -61,9 +61,9 @@ static void reset_exc_info(PyThreadState *);
 static void format_exc_check_arg(PyObject *, char *, PyObject *);
 
 #define NAME_ERROR_MSG \
-       "There is no variable named '%s'"
+       "name '%.200s' is not defined"
 #define UNBOUNDLOCAL_ERROR_MSG \
-       "Local variable '%.200s' referenced before assignment"
+       "local variable '%.200s' referenced before assignment"
 
 /* Dynamic execution profile */
 #ifdef DYNAMIC_EXECUTION_PROFILE
@@ -439,8 +439,10 @@ eval_code2(PyCodeObject *co, PyObject *globals, PyObject *locals,
                if (argcount > co->co_argcount) {
                        if (!(co->co_flags & CO_VARARGS)) {
                                PyErr_Format(PyExc_TypeError,
-                               "too many arguments; expected %d, got %d",
-                                            co->co_argcount, argcount);
+                                   "too many arguments to %s(); "
+                                   "expected %d, got %d",
+                                   PyString_AsString(co->co_name),
+                                   co->co_argcount, argcount);
                                goto fail;
                        }
                        n = co->co_argcount;
@@ -483,7 +485,9 @@ eval_code2(PyCodeObject *co, PyObject *globals, PyObject *locals,
                        if (j >= co->co_argcount) {
                                if (kwdict == NULL) {
                                        PyErr_Format(PyExc_TypeError,
-                                        "unexpected keyword argument: %.400s",
+                                           "%.200s() got an unexpected "
+                                           "keyword argument '%.400s'",
+                                           PyString_AsString(co->co_name),
                                            PyString_AsString(keyword));
                                        goto fail;
                                }
@@ -492,8 +496,10 @@ eval_code2(PyCodeObject *co, PyObject *globals, PyObject *locals,
                        else {
                                if (GETLOCAL(j) != NULL) {
                                        PyErr_Format(PyExc_TypeError, 
-                                    "keyword parameter redefined: %.400s",
-                                            PyString_AsString(keyword));
+                                            "keyword parameter '%.400s' "
+                                            "redefined in call to %.200s()",
+                                            PyString_AsString(keyword),
+                                            PyString_AsString(co->co_name));
                                        goto fail;
                                }
                                Py_INCREF(value);
@@ -505,8 +511,10 @@ eval_code2(PyCodeObject *co, PyObject *globals, PyObject *locals,
                        for (i = argcount; i < m; i++) {
                                if (GETLOCAL(i) == NULL) {
                                        PyErr_Format(PyExc_TypeError,
-                               "not enough arguments; expected %d, got %d",
-                                                    m, i);
+                                           "not enough arguments to "
+                                           "%.200s(); expected %d, got %d",
+                                           PyString_AsString(co->co_name),
+                                           m, i);
                                        goto fail;
                                }
                        }
@@ -525,8 +533,9 @@ eval_code2(PyCodeObject *co, PyObject *globals, PyObject *locals,
        }
        else {
                if (argcount > 0 || kwcount > 0) {
-                       PyErr_SetString(PyExc_TypeError,
-                                       "no arguments expected");
+                       PyErr_Format(PyExc_TypeError,
+                                    "%.200s() expected no arguments",
+                                    PyString_AsString(co->co_name));
                        goto fail;
                }
        }
@@ -565,7 +574,7 @@ eval_code2(PyCodeObject *co, PyObject *globals, PyObject *locals,
        if (++tstate->recursion_depth > recursion_limit) {
                --tstate->recursion_depth;
                PyErr_SetString(PyExc_RuntimeError,
-                               "Maximum recursion depth exceeded");
+                               "maximum recursion depth exceeded");
                tstate->frame = f->f_back;
                Py_DECREF(f);
                return NULL;
@@ -1825,7 +1834,7 @@ eval_code2(PyCodeObject *co, PyObject *globals, PyObject *locals,
                                   /* Handy-dandy */ ;
                            else {
                                PyErr_SetString(PyExc_TypeError,
-           "unbound method must be called with class instance 1st argument");
+           "unbound method must be called with instance as first argument");
                                x = NULL;
                                break;
                            }
@@ -1908,9 +1917,10 @@ eval_code2(PyCodeObject *co, PyObject *globals, PyObject *locals,
                                PyObject *key = POP();
                                if (PyDict_GetItem(kwdict, key) != NULL) {
                                    err = 1;
-                                   PyErr_Format(PyExc_TypeError,
-                                       "keyword parameter redefined: %.400s",
-                                                PyString_AsString(key));
+                                   PyErr_Format(PyExc_TypeError, 
+                                        "keyword parameter '%.400s' "
+                                        "redefined in function call",
+                                        PyString_AsString(key));
                                    Py_DECREF(key);
                                    Py_DECREF(value);
                                    goto extcall_fail;
@@ -2308,7 +2318,7 @@ do_raise(PyObject *type, PyObject *value, PyObject *tb)
        }
        else if (tb != NULL && !PyTraceBack_Check(tb)) {
                PyErr_SetString(PyExc_TypeError,
-                          "raise 3rd arg must be traceback or None");
+                          "raise: arg 3 must be a traceback or None");
                goto raise_error;
        }
 
@@ -2630,6 +2640,7 @@ static PyObject *
 call_builtin(PyObject *func, PyObject *arg, PyObject *kw)
 {
        if (PyCFunction_Check(func)) {
+               PyCFunctionObject* f = (PyCFunctionObject*) func;
                PyCFunction meth = PyCFunction_GetFunction(func);
                PyObject *self = PyCFunction_GetSelf(func);
                int flags = PyCFunction_GetFlags(func);
@@ -2643,8 +2654,9 @@ call_builtin(PyObject *func, PyObject *arg, PyObject *kw)
                if (flags & METH_KEYWORDS)
                        return (*(PyCFunctionWithKeywords)meth)(self, arg, kw);
                if (kw != NULL && PyDict_Size(kw) != 0) {
-                       PyErr_SetString(PyExc_TypeError,
-                                  "this function takes no keyword arguments");
+                       PyErr_Format(PyExc_TypeError,
+                               "%.200s() takes no keyword arguments",
+                               f->m_ml->ml_name);
                        return NULL;
                }
                return (*meth)(self, arg);
@@ -2653,11 +2665,13 @@ call_builtin(PyObject *func, PyObject *arg, PyObject *kw)
                return PyInstance_New(func, arg, kw);
        }
        if (PyInstance_Check(func)) {
-               PyObject *res, *call = PyObject_GetAttrString(func,"__call__");
+               PyObject *res, *call = PyObject_GetAttrString(func, "__call__");
                if (call == NULL) {
+                       PyInstanceObject *inst = (PyInstanceObject*) func;
                        PyErr_Clear();
-                       PyErr_SetString(PyExc_AttributeError,
-                                  "no __call__ method defined");
+                       PyErr_Format(PyExc_AttributeError,
+                               "%.200s instance has no __call__ method",
+                               PyString_AsString(inst->in_class->cl_name));
                        return NULL;
                }
                res = PyEval_CallObjectWithKeywords(call, arg, kw);
@@ -2703,7 +2717,7 @@ call_function(PyObject *func, PyObject *arg, PyObject *kw)
                        }
                        if (self == NULL) {
                                PyErr_SetString(PyExc_TypeError,
-          "unbound method must be called with class instance 1st argument");
+          "unbound method must be called with instance as first argument");
                                return NULL;
                        }
                        Py_INCREF(arg);
@@ -2849,7 +2863,7 @@ _PyEval_SliceIndex(PyObject *v, int *pi)
                        }
                } else {
                        PyErr_SetString(PyExc_TypeError,
-                                       "slice index must be int");
+                                       "slice indices must be integers");
                        return 0;
                }
                /* Truncate -- very long indices are truncated anyway */
@@ -2935,7 +2949,7 @@ import_from(PyObject *v, PyObject *name)
        PyObject *w, *x;
        if (!PyModule_Check(v)) {
                PyErr_SetString(PyExc_TypeError,
-                               "import-from requires module object");
+                               "import-from requires module object");
                return NULL;
        }
        w = PyModule_GetDict(v); /* TDB: can this not fail ? */
@@ -2958,7 +2972,7 @@ import_all_from(PyObject *locals, PyObject *v)
 
        if (!PyModule_Check(v)) {
                PyErr_SetString(PyExc_TypeError,
-                               "import-from requires module object");
+                               "import-from requires module object");
                return -1;
        }
        w = PyModule_GetDict(v); /* TBD: can this not fail ? */
@@ -3068,12 +3082,17 @@ exec_statement(PyFrameObject *f, PyObject *prog, PyObject *globals,
            !PyCode_Check(prog) &&
            !PyFile_Check(prog)) {
                PyErr_SetString(PyExc_TypeError,
-                          "exec 1st arg must be string, code or file object");
+                          "exec: arg 1 must be a string, file, or code object");
+               return -1;
+       }
+       if (!PyDict_Check(globals)) {
+               PyErr_SetString(PyExc_TypeError,
+                   "exec: arg 2 must be a dictionary or None");
                return -1;
        }
-       if (!PyDict_Check(globals) || !PyDict_Check(locals)) {
+       if (!PyDict_Check(locals)) {
                PyErr_SetString(PyExc_TypeError,
-                   "exec 2nd/3rd args must be dict or None");
+                   "exec: arg 3 must be a dictionary or None");
                return -1;
        }
        if (PyDict_GetItemString(globals, "__builtins__") == NULL)
index 28dfbbe3f3acff3bc76f4eedf8f80780173e15f6..3053e0027bdcf61d7e5dc2c649f31a2f4cb3fd66 100644 (file)
@@ -224,7 +224,7 @@ int
 PyErr_BadArgument(void)
 {
        PyErr_SetString(PyExc_TypeError,
-                       "illegal argument type for built-in operation");
+                       "bad argument type for built-in operation");
        return 0;
 }
 
index 6d6291ce32252e325c2ca0d54c68a42711df560e..a95817cf24b8804b52cb2f134b7ffa30c7ff2ccf 100644 (file)
@@ -188,7 +188,7 @@ get_self(PyObject *args)
        /* Watch out for being called to early in the bootstrapping process */
        if (PyExc_TypeError) {
            PyErr_SetString(PyExc_TypeError,
-            "unbound method must be called with class instance 1st argument");
+            "unbound method must be called with instance as first argument");
        }
         return NULL;
     }