gh-95605: Fix float(s) error message when s contains only whitespace (GH-95665) (GH-95858)

This PR fixes the error message from float(s) in the case where s contains only whitespace.
(cherry picked from commit 97e9cfa75a)

Co-authored-by: Mark Dickinson <dickinsm@gmail.com>
This commit is contained in:
Miss Islington (bot) 2022-08-11 09:16:53 -07:00 committed by GitHub
parent 731732aa8b
commit 3ea9ba6478
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 14 additions and 1 deletions

View file

@ -138,6 +138,10 @@ class GeneralFloatCases(unittest.TestCase):
check('123\xbd')
check(' 123 456 ')
check(b' 123 456 ')
# all whitespace (cf. https://github.com/python/cpython/issues/95605)
check('')
check(' ')
check('\t \n')
# non-ascii digits (error came from non-digit '!')
check('\u0663\u0661\u0664!')

View file

@ -0,0 +1,2 @@
Fix misleading contents of error message when converting an all-whitespace
string to :class:`float`.

View file

@ -162,11 +162,18 @@ float_from_string_inner(const char *s, Py_ssize_t len, void *obj)
double x;
const char *end;
const char *last = s + len;
/* strip space */
/* strip leading whitespace */
while (s < last && Py_ISSPACE(*s)) {
s++;
}
if (s == last) {
PyErr_Format(PyExc_ValueError,
"could not convert string to float: "
"%R", obj);
return NULL;
}
/* strip trailing whitespace */
while (s < last - 1 && Py_ISSPACE(last[-1])) {
last--;
}