Better error messages when raising ValueError for int literals. (The

previous version of this code would not show the offending input, even
though there was code that attempted this.)
This commit is contained in:
Guido van Rossum 1998-08-04 15:04:52 +00:00
parent ac6a37ae55
commit 923fece5bd

View File

@ -696,22 +696,17 @@ strop_atoi(self, args)
while (*s && isspace(Py_CHARMASK(*s)))
s++;
if (s[0] == '\0') {
PyErr_SetString(PyExc_ValueError, "empty string for atoi()");
return NULL;
}
errno = 0;
if (base == 0 && s[0] == '0')
x = (long) PyOS_strtoul(s, &end, base);
else
x = PyOS_strtol(s, &end, base);
if (end == s || !isxdigit(end[-1])) {
PyErr_SetString(PyExc_ValueError, "no digits in int constant");
return NULL;
}
if (end == s || !isxdigit(end[-1]))
goto bad;
while (*end && isspace(Py_CHARMASK(*end)))
end++;
if (*end != '\0') {
bad:
sprintf(buffer, "invalid literal for atoi(): %.200s", s);
PyErr_SetString(PyExc_ValueError, buffer);
return NULL;