Commit a5b95995 authored by Ezio Melotti's avatar Ezio Melotti

#17080: improve error message of float/complex when the wrong type is passed.

parent d0786a1a
...@@ -303,6 +303,7 @@ class ComplexTest(unittest.TestCase): ...@@ -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): ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment