diff options
author | Serhiy Storchaka <storchaka@gmail.com> | 2024-10-02 11:28:02 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-10-02 11:28:02 +0300 |
commit | 9b31a2d83fa7cb0fe4d75ce7cf6a2c9ea2ce0728 (patch) | |
tree | 4a58e91004c914bb22a4555fee420031275fbd23 /Lib/argparse.py | |
parent | 9ce90206b7a4649600218cf0bd4826db79c9a312 (diff) | |
download | cpython-9b31a2d83fa7cb0fe4d75ce7cf6a2c9ea2ce0728.tar.gz cpython-9b31a2d83fa7cb0fe4d75ce7cf6a2c9ea2ce0728.zip |
gh-58282: Fix support of tuple metavar for positional arguments in argparse (GH-124782)
Previously, formatting help output or error message for positional argument
with a tuple metavar raised exception.
Co-authored-by: Cyker Way <cykerway@gmail.com>
Diffstat (limited to 'Lib/argparse.py')
-rw-r--r-- | Lib/argparse.py | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/Lib/argparse.py b/Lib/argparse.py index 4b12c2f0c6f..21299b69ecd 100644 --- a/Lib/argparse.py +++ b/Lib/argparse.py @@ -527,8 +527,7 @@ class HelpFormatter(object): def _format_action_invocation(self, action): if not action.option_strings: default = self._get_default_metavar_for_positional(action) - metavar, = self._metavar_formatter(action, default)(1) - return metavar + return ' '.join(self._metavar_formatter(action, default)(1)) else: @@ -703,7 +702,15 @@ def _get_action_name(argument): elif argument.option_strings: return '/'.join(argument.option_strings) elif argument.metavar not in (None, SUPPRESS): - return argument.metavar + metavar = argument.metavar + if not isinstance(metavar, tuple): + return metavar + if argument.nargs == ZERO_OR_MORE and len(metavar) == 2: + return '%s[, %s]' % metavar + elif argument.nargs == ONE_OR_MORE: + return '%s[, %s]' % metavar + else: + return ', '.join(metavar) elif argument.dest not in (None, SUPPRESS): return argument.dest elif argument.choices: |