From abdc634f337ce4943cd7d13587936837aac2ecc9 Mon Sep 17 00:00:00 2001 From: Dong-hee Na Date: Sat, 11 Jan 2020 01:31:43 +0900 Subject: [PATCH] bpo-39200: Correct the error message for min/max builtin function (GH-17814) Correct the error message when calling the min() or max() with no arguments. --- Lib/test/test_builtin.py | 14 ++++++++++++-- .../2020-01-04-01-14-32.bpo-39200.8Z9DYp.rst | 2 ++ Python/bltinmodule.c | 9 +++++++-- 3 files changed, 21 insertions(+), 4 deletions(-) create mode 100644 Misc/NEWS.d/next/Core and Builtins/2020-01-04-01-14-32.bpo-39200.8Z9DYp.rst diff --git a/Lib/test/test_builtin.py b/Lib/test/test_builtin.py index 6a88454289d..5c553a92b97 100644 --- a/Lib/test/test_builtin.py +++ b/Lib/test/test_builtin.py @@ -949,7 +949,12 @@ class BuiltinTest(unittest.TestCase): self.assertEqual(max(1, 2.0, 3), 3) self.assertEqual(max(1.0, 2, 3), 3) - self.assertRaises(TypeError, max) + with self.assertRaisesRegex( + TypeError, + 'max expected at least 1 argument, got 0' + ): + max() + self.assertRaises(TypeError, max, 42) self.assertRaises(ValueError, max, ()) class BadSeq: @@ -1003,7 +1008,12 @@ class BuiltinTest(unittest.TestCase): self.assertEqual(min(1, 2.0, 3), 1) self.assertEqual(min(1.0, 2, 3), 1.0) - self.assertRaises(TypeError, min) + with self.assertRaisesRegex( + TypeError, + 'min expected at least 1 argument, got 0' + ): + min() + self.assertRaises(TypeError, min, 42) self.assertRaises(ValueError, min, ()) class BadSeq: diff --git a/Misc/NEWS.d/next/Core and Builtins/2020-01-04-01-14-32.bpo-39200.8Z9DYp.rst b/Misc/NEWS.d/next/Core and Builtins/2020-01-04-01-14-32.bpo-39200.8Z9DYp.rst new file mode 100644 index 00000000000..71e40720992 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2020-01-04-01-14-32.bpo-39200.8Z9DYp.rst @@ -0,0 +1,2 @@ +Correct the error message when calling the :func:`min` or :func:`max` with +no arguments. Patch by Dong-hee Na. diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c index 34267685be2..4f833c1f462 100644 --- a/Python/bltinmodule.c +++ b/Python/bltinmodule.c @@ -1589,10 +1589,15 @@ min_max(PyObject *args, PyObject *kwds, int op) const int positional = PyTuple_Size(args) > 1; int ret; - if (positional) + if (positional) { v = args; - else if (!PyArg_UnpackTuple(args, name, 1, 1, &v)) + } + else if (!PyArg_UnpackTuple(args, name, 1, 1, &v)) { + if (PyExceptionClass_Check(PyExc_TypeError)) { + PyErr_Format(PyExc_TypeError, "%s expected at least 1 argument, got 0", name); + } return NULL; + } emptytuple = PyTuple_New(0); if (emptytuple == NULL)