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
|
||||
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:
|
||||
|
||||
|
@ -1424,7 +1424,8 @@ class _ActionsContainer(object):
|
||||
chars = self.prefix_chars
|
||||
if not args or len(args) == 1 and args[0][0] not in chars:
|
||||
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)
|
||||
|
||||
# otherwise, we're adding an optional argument
|
||||
|
@ -5411,7 +5411,8 @@ class TestInvalidArgumentConstructors(TestCase):
|
||||
parser.add_argument(dest='foo')
|
||||
with self.assertRaises(ValueError) as cm:
|
||||
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))
|
||||
|
||||
def test_no_argument_actions(self):
|
||||
|
Loading…
x
Reference in New Issue
Block a user