summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Lib/argparse.py2
-rw-r--r--Lib/test/test_argparse.py20
-rw-r--r--Misc/NEWS.d/next/Library/2024-09-25-18-08-29.gh-issue-80259.kO5Tw7.rst2
3 files changed, 16 insertions, 8 deletions
diff --git a/Lib/argparse.py b/Lib/argparse.py
index 4506a5e..3c2023e 100644
--- a/Lib/argparse.py
+++ b/Lib/argparse.py
@@ -2483,7 +2483,7 @@ class ArgumentParser(_AttributeHolder, _ActionsContainer):
value = action.const
else:
value = action.default
- if isinstance(value, str):
+ if isinstance(value, str) and value is not SUPPRESS:
value = self._get_value(action, value)
self._check_value(action, value)
diff --git a/Lib/test/test_argparse.py b/Lib/test/test_argparse.py
index 26e32c3..08f31c2 100644
--- a/Lib/test/test_argparse.py
+++ b/Lib/test/test_argparse.py
@@ -1587,18 +1587,24 @@ class TestDefaultSuppress(ParserTestCase):
"""Test actions with suppressed defaults"""
argument_signatures = [
- Sig('foo', nargs='?', default=argparse.SUPPRESS),
- Sig('bar', nargs='*', default=argparse.SUPPRESS),
+ Sig('foo', nargs='?', type=int, default=argparse.SUPPRESS),
+ Sig('bar', nargs='*', type=int, default=argparse.SUPPRESS),
Sig('--baz', action='store_true', default=argparse.SUPPRESS),
+ Sig('--qux', nargs='?', type=int, default=argparse.SUPPRESS),
+ Sig('--quux', nargs='*', type=int, default=argparse.SUPPRESS),
]
- failures = ['-x']
+ failures = ['-x', 'a', '1 a']
successes = [
('', NS()),
- ('a', NS(foo='a')),
- ('a b', NS(foo='a', bar=['b'])),
+ ('1', NS(foo=1)),
+ ('1 2', NS(foo=1, bar=[2])),
('--baz', NS(baz=True)),
- ('a --baz', NS(foo='a', baz=True)),
- ('--baz a b', NS(foo='a', bar=['b'], baz=True)),
+ ('1 --baz', NS(foo=1, baz=True)),
+ ('--baz 1 2', NS(foo=1, bar=[2], baz=True)),
+ ('--qux', NS(qux=None)),
+ ('--qux 1', NS(qux=1)),
+ ('--quux', NS(quux=[])),
+ ('--quux 1 2', NS(quux=[1, 2])),
]
diff --git a/Misc/NEWS.d/next/Library/2024-09-25-18-08-29.gh-issue-80259.kO5Tw7.rst b/Misc/NEWS.d/next/Library/2024-09-25-18-08-29.gh-issue-80259.kO5Tw7.rst
new file mode 100644
index 0000000..bb451cd
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2024-09-25-18-08-29.gh-issue-80259.kO5Tw7.rst
@@ -0,0 +1,2 @@
+Fix :mod:`argparse` support of positional arguments with ``nargs='?'``,
+``default=argparse.SUPPRESS`` and specified ``type``.