Skip to content

Commit

Permalink
bpo-16970: Adding error message for invalid args (GH-14844)
Browse files Browse the repository at this point in the history
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
  • Loading branch information
tmblweed authored and miss-islington committed Aug 2, 2019
1 parent 2491134 commit 4b3e975
Show file tree
Hide file tree
Showing 4 changed files with 38 additions and 4 deletions.
9 changes: 6 additions & 3 deletions Lib/argparse.py
Expand Up @@ -593,7 +593,10 @@ def _format_args(self, action, default_metavar):
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

Expand Down Expand Up @@ -850,7 +853,7 @@ def __init__(self,
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:
Expand Down Expand Up @@ -942,7 +945,7 @@ def __init__(self,
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:
Expand Down
30 changes: 29 additions & 1 deletion Lib/test/test_argparse.py
Expand Up @@ -4263,7 +4263,6 @@ class TestHelpSubparsersWithHelpOrdering(HelpTestCase):


class TestHelpMetavarTypeFormatter(HelpTestCase):
""""""

def custom_type(string):
return string
Expand Down Expand Up @@ -5150,6 +5149,35 @@ def test_nargs_3_metavar_length2(self):
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
# ============================
Expand Down
1 change: 1 addition & 0 deletions Misc/ACKS
Expand Up @@ -1878,3 +1878,4 @@ Edison Abahurire
Geoff Shannon
Batuhan Taskaya
Aleksandr Balezin
Robert Leenders
@@ -0,0 +1,2 @@
Adding a value error when an invalid value in passed to nargs
Patch by Robert Leenders

0 comments on commit 4b3e975

Please sign in to comment.