mirror of
https://github.com/python/cpython.git
synced 2025-09-25 09:50:37 +00:00
bpo-16970: Adding error message for invalid args (GH-14844)
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
(cherry picked from commit 4b3e975923
)
Co-authored-by: tmblweed <tmblweed@users.noreply.github.com>
This commit is contained in:
parent
8399641c34
commit
1cc70322c9
4 changed files with 38 additions and 4 deletions
|
@ -593,7 +593,10 @@ class HelpFormatter(object):
|
||||||
elif action.nargs == SUPPRESS:
|
elif action.nargs == SUPPRESS:
|
||||||
result = ''
|
result = ''
|
||||||
else:
|
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)
|
result = ' '.join(formats) % get_metavar(action.nargs)
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
@ -850,7 +853,7 @@ class _StoreAction(Action):
|
||||||
help=None,
|
help=None,
|
||||||
metavar=None):
|
metavar=None):
|
||||||
if nargs == 0:
|
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 '
|
'have nothing to store, actions such as store '
|
||||||
'true or store const may be more appropriate')
|
'true or store const may be more appropriate')
|
||||||
if const is not None and nargs != OPTIONAL:
|
if const is not None and nargs != OPTIONAL:
|
||||||
|
@ -942,7 +945,7 @@ class _AppendAction(Action):
|
||||||
help=None,
|
help=None,
|
||||||
metavar=None):
|
metavar=None):
|
||||||
if nargs == 0:
|
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, '
|
'strings are not supplying the value to append, '
|
||||||
'the append const action may be more appropriate')
|
'the append const action may be more appropriate')
|
||||||
if const is not None and nargs != OPTIONAL:
|
if const is not None and nargs != OPTIONAL:
|
||||||
|
|
|
@ -4263,7 +4263,6 @@ class TestHelpSubparsersWithHelpOrdering(HelpTestCase):
|
||||||
|
|
||||||
|
|
||||||
class TestHelpMetavarTypeFormatter(HelpTestCase):
|
class TestHelpMetavarTypeFormatter(HelpTestCase):
|
||||||
""""""
|
|
||||||
|
|
||||||
def custom_type(string):
|
def custom_type(string):
|
||||||
return string
|
return string
|
||||||
|
@ -5150,6 +5149,35 @@ class TestAddArgumentMetavar(TestCase):
|
||||||
def test_nargs_3_metavar_length3(self):
|
def test_nargs_3_metavar_length3(self):
|
||||||
self.do_test_no_exception(nargs=3, metavar=("1", "2", "3"))
|
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
|
# from argparse import * tests
|
||||||
# ============================
|
# ============================
|
||||||
|
|
|
@ -1872,3 +1872,4 @@ Edison Abahurire
|
||||||
Geoff Shannon
|
Geoff Shannon
|
||||||
Batuhan Taskaya
|
Batuhan Taskaya
|
||||||
Aleksandr Balezin
|
Aleksandr Balezin
|
||||||
|
Robert Leenders
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
Adding a value error when an invalid value in passed to nargs
|
||||||
|
Patch by Robert Leenders
|
Loading…
Add table
Add a link
Reference in a new issue