[3.11] gh-92446: Improve argparse choices docs (GH-94627) (#100528)

Based on the definition of the collections.abc classes, it is more accurate to use "sequence" instead of "container" when describing argparse choices.

(cherry picked from commit ad3c99e521)

Co-authored-by: Guy Yagev <yourlefthandman8@gmail.com>
Co-authored-by: Shantanu <12621235+hauntsaninja@users.noreply.github.com>
This commit is contained in:
Shantanu 2022-12-26 01:09:06 -06:00 committed by GitHub
parent 75b75dfdac
commit 2cb4b13af6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -755,7 +755,7 @@ The add_argument() method
* type_ - The type to which the command-line argument should be converted. * type_ - The type to which the command-line argument should be converted.
* choices_ - A container of the allowable values for the argument. * choices_ - A sequence of the allowable values for the argument.
* required_ - Whether or not the command-line option may be omitted * required_ - Whether or not the command-line option may be omitted
(optionals only). (optionals only).
@ -1199,7 +1199,7 @@ choices
^^^^^^^ ^^^^^^^
Some command-line arguments should be selected from a restricted set of values. Some command-line arguments should be selected from a restricted set of values.
These can be handled by passing a container object as the *choices* keyword These can be handled by passing a sequence object as the *choices* keyword
argument to :meth:`~ArgumentParser.add_argument`. When the command line is argument to :meth:`~ArgumentParser.add_argument`. When the command line is
parsed, argument values will be checked, and an error message will be displayed parsed, argument values will be checked, and an error message will be displayed
if the argument was not one of the acceptable values:: if the argument was not one of the acceptable values::
@ -1213,9 +1213,9 @@ if the argument was not one of the acceptable values::
game.py: error: argument move: invalid choice: 'fire' (choose from 'rock', game.py: error: argument move: invalid choice: 'fire' (choose from 'rock',
'paper', 'scissors') 'paper', 'scissors')
Note that inclusion in the *choices* container is checked after any type_ Note that inclusion in the *choices* sequence is checked after any type_
conversions have been performed, so the type of the objects in the *choices* conversions have been performed, so the type of the objects in the *choices*
container should match the type_ specified:: sequence should match the type_ specified::
>>> parser = argparse.ArgumentParser(prog='doors.py') >>> parser = argparse.ArgumentParser(prog='doors.py')
>>> parser.add_argument('door', type=int, choices=range(1, 4)) >>> parser.add_argument('door', type=int, choices=range(1, 4))
@ -1225,8 +1225,8 @@ container should match the type_ specified::
usage: doors.py [-h] {1,2,3} usage: doors.py [-h] {1,2,3}
doors.py: error: argument door: invalid choice: 4 (choose from 1, 2, 3) doors.py: error: argument door: invalid choice: 4 (choose from 1, 2, 3)
Any container can be passed as the *choices* value, so :class:`list` objects, Any sequence can be passed as the *choices* value, so :class:`list` objects,
:class:`set` objects, and custom containers are all supported. :class:`tuple` objects, and custom sequences are all supported.
Use of :class:`enum.Enum` is not recommended because it is difficult to Use of :class:`enum.Enum` is not recommended because it is difficult to
control its appearance in usage, help, and error messages. control its appearance in usage, help, and error messages.