New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
argparse: document that add_argument returns a Action object #69223
Comments
On making a look at the argparse documentation to figure out if I can get the value of the choices key of a specific argument after argument parsing or if I have to implement it myself I noticed that there is a getter/setter for the default key (ArgumentParser.get_default and ArgumentParser.set_defaults) but not for the other keys. Maybe this could also be implemented for the other keys, probably as a generic function that takes as an extra argument the requested key. |
Can you provide some specific use cases, please? |
I was myself in the case where I needed the values of the choices key of 2 specific arguments. Currently I'm solving this by storing them in variables but probably it could be cleaner by using a getter. |
I'd suggest doing this in an interactive shell, and see for yourself the attributes of this object. Simply doing a 'print' on the object shows a number of the attributes (but not all). It is possible to view, and in some cases, even modify these attributes directly.
I don't think there's a need for getter/setter methods for Action attributes. The attributes are accessible by normal Python object approaches. p.s. Another forum for asking argparse how-to questions is Stackoverflow. Just tag it 'argparse'. |
I'm actually not fully sure why you are telling me this all, especially in this specific way. But I would also go the other way, by removing ArgumentParser.get_default and ArgumentParser.set_defaults if we think the current ways of getting/setting are enough. Mainly I think consistence is the important here. |
'choices' (and other things like 'required', 'nargs', even 'default') is an attribute of a specific Action (argument object). You normally only set these in one way, as parameters of the 'action.default' and 'action.choices' are 'public' attributes. 'parser._defaults' is a 'private' attribute. A setter method is the right way to change a 'private' attribute (if needed). It usually isn't need for a 'public' one. |
In this case probably all is fine then. But there is a minor thing I noticed from one of your previous posts: You said parser.add_argument returns an Action object but I noticed that this is not mentioned on "16.4.3. The add_argument() method". Is it maybe mentioned somewhere else or probably just missing? |
Yes, the information that The documentation has many faults. It isn't basic enough to be a tutorial, but many first time users use it as such, and get confused by its complexity. But it also is not a formal reference document. And the automatic 'help(argparse)' isn't much better. A regular user does not need to use the Action object directly. But as a developer I often test argparse in an interactive shell (IPython), and the 'out' line shows a 'str' of the object (as a summary of its attributes). So assigning that object to a variable is just as natural to me as saving the parser object returned by argparse.ArgumentParser, or the group object returned by parser.add_argument_group. |
@iritkatriel is this issue still relevant? |
This is probably not a good first issue because the argparse docs need a deeper review and we don’t have an active maintainer at the moment working on that. I will remove the easy label. |
Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.
Show more details
GitHub fields:
bugs.python.org fields:
The text was updated successfully, but these errors were encountered: