gh-132558: Improve argparse docs on combining type and choices (#133827)

Co-authored-by: Savannah Bailey <savannahostrowski@gmail.com>
This commit is contained in:
Hans Then 2025-09-17 17:25:17 +02:00 committed by GitHub
parent 2212ae5557
commit dd0840bf67
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -1142,16 +1142,21 @@ if the argument was not one of the acceptable values::
game.py: error: argument move: invalid choice: 'fire' (choose from 'rock',
'paper', 'scissors')
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*
sequence should match the type_ specified.
Any sequence can be passed as the *choices* value, so :class:`list` objects,
:class:`tuple` objects, and custom sequences are all supported.
Use of :class:`enum.Enum` is not recommended because it is difficult to
control its appearance in usage, help, and error messages.
Note that *choices* are checked after any type_
conversions have been performed, so objects in *choices*
should match the type_ specified. This can make *choices*
appear unfamiliar in usage, help, or error messages.
To keep *choices* user-friendly, consider a custom type wrapper that
converts and formats values, or omit type_ and handle conversion in
your application code.
Formatted choices override the default *metavar* which is normally derived
from *dest*. This is usually what you want because the user never sees the
*dest* parameter. If this display isn't desirable (perhaps because there are