]> granicus.if.org Git - python/commitdiff
bpo-16970: Adding error message for invalid args (GH-14844)
authortmblweed <tmblweed@users.noreply.github.com>
Fri, 2 Aug 2019 04:57:13 +0000 (21:57 -0700)
committerMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Fri, 2 Aug 2019 04:57:13 +0000 (21:57 -0700)
BPO -16970: Adding error message for invalid args

Applied the patch argparse-v2 patch issue 16970, ran patch check and the test suite, test_argparse with 0 errors

https://bugs.python.org/issue16970

Lib/argparse.py
Lib/test/test_argparse.py
Misc/ACKS
Misc/NEWS.d/next/Library/2019-07-19-01-46-56.bpo-16970.GEASf5.rst [new file with mode: 0644]

index e45b67b67704a98364cc52a99c3147fd46a13185..a300828f9e3d2eac96b7e947cc4a68792bafb785 100644 (file)
@@ -593,7 +593,10 @@ class HelpFormatter(object):
         elif action.nargs == SUPPRESS:
             result = ''
         else:
-            formats = ['%s' for _ in range(action.nargs)]
+            try:
+                formats = ['%s' for _ in range(action.nargs)]
+            except TypeError:
+                raise ValueError("invalid nargs value") from None
             result = ' '.join(formats) % get_metavar(action.nargs)
         return result
 
@@ -850,7 +853,7 @@ class _StoreAction(Action):
                  help=None,
                  metavar=None):
         if nargs == 0:
-            raise ValueError('nargs for store actions must be > 0; if you '
+            raise ValueError('nargs for store actions must be != 0; if you '
                              'have nothing to store, actions such as store '
                              'true or store const may be more appropriate')
         if const is not None and nargs != OPTIONAL:
@@ -942,7 +945,7 @@ class _AppendAction(Action):
                  help=None,
                  metavar=None):
         if nargs == 0:
-            raise ValueError('nargs for append actions must be > 0; if arg '
+            raise ValueError('nargs for append actions must be != 0; if arg '
                              'strings are not supplying the value to append, '
                              'the append const action may be more appropriate')
         if const is not None and nargs != OPTIONAL:
index 5128dc5e1be4998d8128578d25c8d38ce474dce5..d6d16090eb0260c487754e1f7fc7f5358a68b634 100644 (file)
@@ -4263,7 +4263,6 @@ class TestHelpSubparsersWithHelpOrdering(HelpTestCase):
 
 
 class TestHelpMetavarTypeFormatter(HelpTestCase):
-    """"""
 
     def custom_type(string):
         return string
@@ -5150,6 +5149,35 @@ class TestAddArgumentMetavar(TestCase):
     def test_nargs_3_metavar_length3(self):
         self.do_test_no_exception(nargs=3, metavar=("1", "2", "3"))
 
+
+class TestInvalidNargs(TestCase):
+
+    EXPECTED_INVALID_MESSAGE = "invalid nargs value"
+    EXPECTED_RANGE_MESSAGE = ("nargs for store actions must be != 0; if you "
+                              "have nothing to store, actions such as store "
+                              "true or store const may be more appropriate")
+
+    def do_test_range_exception(self, nargs):
+        parser = argparse.ArgumentParser()
+        with self.assertRaises(ValueError) as cm:
+            parser.add_argument("--foo", nargs=nargs)
+        self.assertEqual(cm.exception.args[0], self.EXPECTED_RANGE_MESSAGE)
+
+    def do_test_invalid_exception(self, nargs):
+        parser = argparse.ArgumentParser()
+        with self.assertRaises(ValueError) as cm:
+            parser.add_argument("--foo", nargs=nargs)
+        self.assertEqual(cm.exception.args[0], self.EXPECTED_INVALID_MESSAGE)
+
+    # Unit tests for different values of nargs
+
+    def test_nargs_alphabetic(self):
+        self.do_test_invalid_exception(nargs='a')
+        self.do_test_invalid_exception(nargs="abcd")
+
+    def test_nargs_zero(self):
+        self.do_test_range_exception(nargs=0)
+
 # ============================
 # from argparse import * tests
 # ============================
index 6463b535e17ce9526e47c1f80bae2229893bac06..82fc51c98c403285a78ec7fbfc24064dba954972 100644 (file)
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -1878,3 +1878,4 @@ Edison Abahurire
 Geoff Shannon
 Batuhan Taskaya
 Aleksandr Balezin
+Robert Leenders
diff --git a/Misc/NEWS.d/next/Library/2019-07-19-01-46-56.bpo-16970.GEASf5.rst b/Misc/NEWS.d/next/Library/2019-07-19-01-46-56.bpo-16970.GEASf5.rst
new file mode 100644 (file)
index 0000000..7285b81
--- /dev/null
@@ -0,0 +1,2 @@
+Adding a value error when an invalid value in passed to nargs
+Patch by Robert Leenders