Skip to content

Commit b8bc465

Browse files
committed
PR review changes 🔨
1 parent b3b4a9e commit b8bc465

File tree

2 files changed

+11
-14
lines changed

2 files changed

+11
-14
lines changed

Lib/argparse.py

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2541,14 +2541,23 @@ def _get_value(self, action, arg_string):
25412541
return result
25422542

25432543
def _check_value(self, action, value):
2544+
if not action.choices and isinstance(action.choices, list):
2545+
msg = 'Either add options in choices array or remove it'
2546+
raise ArgumentError(action, msg)
2547+
25442548
# converted value must be one of the choices (if specified)
25452549
if action.choices is not None and value not in action.choices:
2546-
closest_choice = _difflib.get_close_matches(value, action.choices)
2550+
try:
2551+
closest_choice = _difflib.get_close_matches(value, action.choices, 1)
2552+
except TypeError:
2553+
closest_choice = []
2554+
25472555
args = {
25482556
'value': value,
25492557
'choices': ', '.join(map(repr, action.choices)),
25502558
}
2551-
if closest_choice := closest_choice and closest_choice[0] or None:
2559+
if closest_choice:
2560+
closest_choice = closest_choice[0]
25522561
args['closest'] = closest_choice
25532562
msg = _('invalid choice: %(value)r, maybe you meant %(closest)r? '
25542563
'(choose from %(choices)s)')

Lib/test/test_argparse.py

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2187,18 +2187,6 @@ def test_required_subparsers_no_destination_error(self):
21872187
)
21882188

21892189
def test_wrong_argument_subparsers_no_destination_error(self):
2190-
parser = ErrorRaisingArgumentParser()
2191-
subparsers = parser.add_subparsers(required=True)
2192-
subparsers.add_parser('foo')
2193-
subparsers.add_parser('bar')
2194-
with self.assertRaises(ArgumentParserError) as excinfo:
2195-
parser.parse_args(('test',))
2196-
self.assertRegex(
2197-
excinfo.exception.stderr,
2198-
r"error: argument {foo,bar}: invalid choice: 'baz' \(choose from 'foo', 'bar'\)\n$"
2199-
)
2200-
2201-
def test_wrong_argument_subparsers_no_destination_error_with_closest_choice_input(self):
22022190
parser = ErrorRaisingArgumentParser()
22032191
subparsers = parser.add_subparsers(required=True)
22042192
subparsers.add_parser('foo')

0 commit comments

Comments
 (0)