]> granicus.if.org Git - python/commitdiff
bpo-34127: Fix grammar in error message with respect to argument count (GH-8395)
authorXtreak <tirkarthi@users.noreply.github.com>
Sun, 22 Jul 2018 20:13:26 +0000 (01:43 +0530)
committerRaymond Hettinger <rhettinger@users.noreply.github.com>
Sun, 22 Jul 2018 20:13:26 +0000 (13:13 -0700)
Lib/test/test_call.py
Misc/NEWS.d/next/C API/2018-07-22-14-58-06.bpo-34127.qkfnHO.rst [new file with mode: 0644]
Python/getargs.c

index 3f9987c9e777f177db20c2c91751958110b5e3a8..ec9697a444f0d9293d90124668bbe6cccbfd69c3 100644 (file)
@@ -143,6 +143,22 @@ class CFunctionCallsErrorMessages(unittest.TestCase):
         msg = r"^from_bytes\(\) takes at most 2 positional arguments \(3 given\)"
         self.assertRaisesRegex(TypeError, msg, int.from_bytes, b'a', 'little', False)
 
+    def test_varargs4(self):
+        msg = r"get expected at least 1 argument, got 0"
+        self.assertRaisesRegex(TypeError, msg, {}.get)
+
+    def test_varargs5(self):
+        msg = r"getattr expected at least 2 arguments, got 0"
+        self.assertRaisesRegex(TypeError, msg, getattr)
+
+    def test_varargs6(self):
+        msg = r"input expected at most 1 argument, got 2"
+        self.assertRaisesRegex(TypeError, msg, input, 1, 2)
+
+    def test_varargs7(self):
+        msg = r"get expected at most 2 arguments, got 3"
+        self.assertRaisesRegex(TypeError, msg, {}.get, 1, 2, 3)
+
     def test_varargs1_kw(self):
         msg = r"__contains__\(\) takes no keyword arguments"
         self.assertRaisesRegex(TypeError, msg, {}.__contains__, x=2)
diff --git a/Misc/NEWS.d/next/C API/2018-07-22-14-58-06.bpo-34127.qkfnHO.rst b/Misc/NEWS.d/next/C API/2018-07-22-14-58-06.bpo-34127.qkfnHO.rst
new file mode 100644 (file)
index 0000000..c5b8c07
--- /dev/null
@@ -0,0 +1,2 @@
+Return grammatically correct error message based on argument count.
+Patch by Karthikeyan Singaravelan.
index 992cb216c257f978d0c9439e8136cd0da7ae98c1..98823f22ed4e01363a852ed8d74cfa426d565ce2 100644 (file)
@@ -2411,8 +2411,8 @@ unpack_stack(PyObject *const *args, Py_ssize_t nargs, const char *name,
         if (name != NULL)
             PyErr_Format(
                 PyExc_TypeError,
-                "%.200s expected %s%zd arguments, got %zd",
-                name, (min == max ? "" : "at least "), min, nargs);
+                "%.200s expected %s%zd argument%s, got %zd",
+                name, (min == max ? "" : "at least "), min, min == 1 ? "" : "s", nargs);
         else
             PyErr_Format(
                 PyExc_TypeError,
@@ -2430,8 +2430,8 @@ unpack_stack(PyObject *const *args, Py_ssize_t nargs, const char *name,
         if (name != NULL)
             PyErr_Format(
                 PyExc_TypeError,
-                "%.200s expected %s%zd arguments, got %zd",
-                name, (min == max ? "" : "at most "), max, nargs);
+                "%.200s expected %s%zd argument%s, got %zd",
+                name, (min == max ? "" : "at most "), max, max == 1 ? "" : "s", nargs);
         else
             PyErr_Format(
                 PyExc_TypeError,