(original) (raw)

changeset: 104052:a2d93e6bcbcf branch: 3.6 parent: 104049:b0c56ee58478 parent: 104051:92f4ce2d5ebb user: Mark Dickinson dickinsm@gmail.com date: Sat Sep 24 15:28:34 2016 +0100 files: Lib/test/test_complex.py Misc/ACKS Misc/NEWS Objects/complexobject.c description: Issue #28203: Merge from 3.5 diff -r b0c56ee58478 -r a2d93e6bcbcf Lib/test/test_complex.py --- a/Lib/test/test_complex.py Sat Sep 24 12:34:25 2016 +0200 +++ b/Lib/test/test_complex.py Sat Sep 24 15:28:34 2016 +0100 @@ -328,6 +328,14 @@ self.assertRaises(ValueError, complex, "1e1ej") self.assertRaises(ValueError, complex, "1e++1ej") self.assertRaises(ValueError, complex, ")1+2j(") + self.assertRaisesRegex( + TypeError, + "first argument must be a string or a number, not 'dict'", + complex, {1:2}, 1) + self.assertRaisesRegex( + TypeError, + "second argument must be a number, not 'dict'", + complex, 1, {1:2}) # the following three are accepted by Python 2.6 self.assertRaises(ValueError, complex, "1..1j") self.assertRaises(ValueError, complex, "1.11.1j") diff -r b0c56ee58478 -r a2d93e6bcbcf Misc/ACKS --- a/Misc/ACKS Sat Sep 24 12:34:25 2016 +0200 +++ b/Misc/ACKS Sat Sep 24 15:28:34 2016 +0100 @@ -1369,6 +1369,7 @@ Mark Shannon Ha Shao Richard Shapiro +Soumya Sharma Varun Sharma Daniel Shaulov Vlad Shcherbina diff -r b0c56ee58478 -r a2d93e6bcbcf Misc/NEWS --- a/Misc/NEWS Sat Sep 24 12:34:25 2016 +0200 +++ b/Misc/NEWS Sat Sep 24 15:28:34 2016 +0100 @@ -10,6 +10,9 @@ Core and Builtins ----------------- +- Issue #28203: Fix incorrect type in complex(1.0, {2:3}) error message. + Patch by Soumya Sharma. + - Issue #28086: Single var-positional argument of tuple subtype was passed unscathed to the C-defined function. Now it is converted to exact tuple. diff -r b0c56ee58478 -r a2d93e6bcbcf Objects/complexobject.c --- a/Objects/complexobject.c Sat Sep 24 12:34:25 2016 +0200 +++ b/Objects/complexobject.c Sat Sep 24 15:28:34 2016 +0100 @@ -965,18 +965,29 @@ } nbr = r->ob_type->tp_as_number; - if (i != NULL) - nbi = i->ob_type->tp_as_number; - if (nbr == NULL || nbr->nb_float == NULL || - ((i != NULL) && (nbi == NULL || nbi->nb_float == NULL))) { + if (nbr == NULL || nbr->nb_float == NULL) { PyErr_Format(PyExc_TypeError, - "complex() argument must be a string or a number, not '%.200s'", - Py_TYPE(r)->tp_name); + "complex() first argument must be a string or a number, " + "not '%.200s'", + Py_TYPE(r)->tp_name); if (own_r) { Py_DECREF(r); } return NULL; } + if (i != NULL) { + nbi = i->ob_type->tp_as_number; + if (nbi == NULL || nbi->nb_float == NULL) { + PyErr_Format(PyExc_TypeError, + "complex() second argument must be a number, " + "not '%.200s'", + Py_TYPE(i)->tp_name); + if (own_r) { + Py_DECREF(r); + } + return NULL; + } + } /* If we get this far, then the "real" and "imag" parts should both be treated as numbers, and the constructor should return a /dickinsm@gmail.com