mirror of
https://github.com/python/cpython.git
synced 2025-07-12 13:55:34 +00:00
#17080: improve error message of float/complex when the wrong type is passed.
This commit is contained in:
parent
d0786a1a50
commit
a5b9599538
4 changed files with 11 additions and 6 deletions
|
@ -303,6 +303,7 @@ class ComplexTest(unittest.TestCase):
|
||||||
self.assertRaises(TypeError, float, 5+3j)
|
self.assertRaises(TypeError, float, 5+3j)
|
||||||
self.assertRaises(ValueError, complex, "")
|
self.assertRaises(ValueError, complex, "")
|
||||||
self.assertRaises(TypeError, complex, None)
|
self.assertRaises(TypeError, complex, None)
|
||||||
|
self.assertRaisesRegex(TypeError, "not 'NoneType'", complex, None)
|
||||||
self.assertRaises(ValueError, complex, "\0")
|
self.assertRaises(ValueError, complex, "\0")
|
||||||
self.assertRaises(ValueError, complex, "3\09")
|
self.assertRaises(ValueError, complex, "3\09")
|
||||||
self.assertRaises(TypeError, complex, "1", "2")
|
self.assertRaises(TypeError, complex, "1", "2")
|
||||||
|
|
|
@ -41,6 +41,7 @@ class GeneralFloatCases(unittest.TestCase):
|
||||||
self.assertRaises(ValueError, float, "-.")
|
self.assertRaises(ValueError, float, "-.")
|
||||||
self.assertRaises(ValueError, float, b"-")
|
self.assertRaises(ValueError, float, b"-")
|
||||||
self.assertRaises(TypeError, float, {})
|
self.assertRaises(TypeError, float, {})
|
||||||
|
self.assertRaisesRegex(TypeError, "not 'dict'", float, {})
|
||||||
# Lone surrogate
|
# Lone surrogate
|
||||||
self.assertRaises(UnicodeEncodeError, float, '\uD8F0')
|
self.assertRaises(UnicodeEncodeError, float, '\uD8F0')
|
||||||
# check that we don't accept alternate exponent markers
|
# check that we don't accept alternate exponent markers
|
||||||
|
|
|
@ -773,8 +773,9 @@ complex_subtype_from_string(PyTypeObject *type, PyObject *v)
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
else if (PyObject_AsCharBuffer(v, &s, &len)) {
|
else if (PyObject_AsCharBuffer(v, &s, &len)) {
|
||||||
PyErr_SetString(PyExc_TypeError,
|
PyErr_Format(PyExc_TypeError,
|
||||||
"complex() argument must be a string or a number");
|
"complex() argument must be a string or a number, not '%.200s'",
|
||||||
|
Py_TYPE(v)->tp_name);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -953,8 +954,9 @@ complex_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
|
||||||
nbi = i->ob_type->tp_as_number;
|
nbi = i->ob_type->tp_as_number;
|
||||||
if (nbr == NULL || nbr->nb_float == NULL ||
|
if (nbr == NULL || nbr->nb_float == NULL ||
|
||||||
((i != NULL) && (nbi == NULL || nbi->nb_float == NULL))) {
|
((i != NULL) && (nbi == NULL || nbi->nb_float == NULL))) {
|
||||||
PyErr_SetString(PyExc_TypeError,
|
PyErr_Format(PyExc_TypeError,
|
||||||
"complex() argument must be a string or a number");
|
"complex() argument must be a string or a number, not '%.200s'",
|
||||||
|
Py_TYPE(r)->tp_name);
|
||||||
if (own_r) {
|
if (own_r) {
|
||||||
Py_DECREF(r);
|
Py_DECREF(r);
|
||||||
}
|
}
|
||||||
|
|
|
@ -144,8 +144,9 @@ PyFloat_FromString(PyObject *v)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (PyObject_AsCharBuffer(v, &s, &len)) {
|
else if (PyObject_AsCharBuffer(v, &s, &len)) {
|
||||||
PyErr_SetString(PyExc_TypeError,
|
PyErr_Format(PyExc_TypeError,
|
||||||
"float() argument must be a string or a number");
|
"float() argument must be a string or a number, not '%.200s'",
|
||||||
|
Py_TYPE(v)->tp_name);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
last = s + len;
|
last = s + len;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue