]> granicus.if.org Git - python/commitdiff
Better error messages when raising ValueError for int and long
authorGuido van Rossum <guido@python.org>
Tue, 4 Aug 1998 15:02:01 +0000 (15:02 +0000)
committerGuido van Rossum <guido@python.org>
Tue, 4 Aug 1998 15:02:01 +0000 (15:02 +0000)
literals.  (The previous version of this code would not show the
offending input, even though there was code that attempted this.)

Objects/abstract.c

index cfa4cc839c8c7c7570b829502d338138b5e7b5d1..7458b94dfb8dd56558b14ec260d38075ef112e27 100644 (file)
@@ -69,13 +69,12 @@ int_from_string(v)
                s++;
        errno = 0;
        x = PyOS_strtol(s, &end, 10);
-       if (end == s || !isdigit(end[-1])) {
-               PyErr_SetString(PyExc_ValueError, "no digits in int constant");
-               return NULL;
-       }
+       if (end == s || !isdigit(end[-1]))
+               goto bad;
        while (*end && isspace(Py_CHARMASK(*end)))
                end++;
        if (*end != '\0') {
+  bad:
                sprintf(buffer, "invalid literal for int(): %.200s", s);
                PyErr_SetString(PyExc_ValueError, buffer);
                return NULL;
@@ -105,14 +104,18 @@ long_from_string(v)
        while (*s && isspace(Py_CHARMASK(*s)))
                s++;
        x = PyLong_FromString(s, &end, 10);
-       if (x == NULL)
+       if (x == NULL) {
+               if (PyErr_ExceptionMatches(PyExc_ValueError))
+                       goto bad;
                return NULL;
+       }
        while (*end && isspace(Py_CHARMASK(*end)))
                end++;
        if (*end != '\0') {
+  bad:
                sprintf(buffer, "invalid literal for long(): %.200s", s);
                PyErr_SetString(PyExc_ValueError, buffer);
-               Py_DECREF(x);
+               Py_XDECREF(x);
                return NULL;
        }
        else if (end != PyString_AS_STRING(v) + PyString_GET_SIZE(v)) {