gh-59330: Improve error message for dest= for positionals (GH-125215)
Also improve the documentation. Specify how dest and metavar are derived from add_argument() positional arguments. Co-authored-by: Simon Law <sfllaw@sfllaw.ca>
This commit is contained in:
parent
eb2d268ac7
commit
a6c0c64de0
@ -636,6 +636,25 @@ be positional::
|
|||||||
usage: PROG [-h] [-f FOO] bar
|
usage: PROG [-h] [-f FOO] bar
|
||||||
PROG: error: the following arguments are required: bar
|
PROG: error: the following arguments are required: bar
|
||||||
|
|
||||||
|
By default, argparse automatically handles the internal naming and
|
||||||
|
display names of arguments, simplifying the process without requiring
|
||||||
|
additional configuration.
|
||||||
|
As such, you do not need to specify the dest_ and metavar_ parameters.
|
||||||
|
The dest_ parameter defaults to the argument name with underscores ``_``
|
||||||
|
replacing hyphens ``-`` . The metavar_ parameter defaults to the
|
||||||
|
upper-cased name. For example::
|
||||||
|
|
||||||
|
>>> parser = argparse.ArgumentParser(prog='PROG')
|
||||||
|
>>> parser.add_argument('--foo-bar')
|
||||||
|
>>> parser.parse_args(['--foo-bar', 'FOO-BAR']
|
||||||
|
Namespace(foo_bar='FOO-BAR')
|
||||||
|
>>> parser.print_help()
|
||||||
|
usage: [-h] [--foo-bar FOO-BAR]
|
||||||
|
|
||||||
|
optional arguments:
|
||||||
|
-h, --help show this help message and exit
|
||||||
|
--foo-bar FOO-BAR
|
||||||
|
|
||||||
|
|
||||||
.. _action:
|
.. _action:
|
||||||
|
|
||||||
|
@ -1424,7 +1424,8 @@ class _ActionsContainer(object):
|
|||||||
chars = self.prefix_chars
|
chars = self.prefix_chars
|
||||||
if not args or len(args) == 1 and args[0][0] not in chars:
|
if not args or len(args) == 1 and args[0][0] not in chars:
|
||||||
if args and 'dest' in kwargs:
|
if args and 'dest' in kwargs:
|
||||||
raise ValueError('dest supplied twice for positional argument')
|
raise ValueError('dest supplied twice for positional argument,'
|
||||||
|
' did you mean metavar?')
|
||||||
kwargs = self._get_positional_kwargs(*args, **kwargs)
|
kwargs = self._get_positional_kwargs(*args, **kwargs)
|
||||||
|
|
||||||
# otherwise, we're adding an optional argument
|
# otherwise, we're adding an optional argument
|
||||||
|
@ -5411,7 +5411,8 @@ class TestInvalidArgumentConstructors(TestCase):
|
|||||||
parser.add_argument(dest='foo')
|
parser.add_argument(dest='foo')
|
||||||
with self.assertRaises(ValueError) as cm:
|
with self.assertRaises(ValueError) as cm:
|
||||||
parser.add_argument('bar', dest='baz')
|
parser.add_argument('bar', dest='baz')
|
||||||
self.assertIn('dest supplied twice for positional argument',
|
self.assertIn('dest supplied twice for positional argument,'
|
||||||
|
' did you mean metavar?',
|
||||||
str(cm.exception))
|
str(cm.exception))
|
||||||
|
|
||||||
def test_no_argument_actions(self):
|
def test_no_argument_actions(self):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user