paul j3 <[email protected]> added the comment:
It doesn't have to be a special class. It can be a `argparse.Namespace` object.
If the preexisting namespace has an attribute set, the action default will not
over write it.
In [85]: parser = argparse.ArgumentParser()
...: parser.add_argument('--foo', default='bar')
...: parser.parse_args([],
namespace=argparse.Namespace(foo=123, baz=132))
Out[85]: Namespace(baz=132, foo=123)
This is described in comments at the start of parse_known_args()
....
# add any action defaults that aren't present
for action in self._actions:
if action.dest is not SUPPRESS:
if not hasattr(namespace, action.dest):
if action.default is not SUPPRESS:
setattr(namespace, action.dest, action.default)
# add any parser defaults that aren't present
for dest in self._defaults:
if not hasattr(namespace, dest):
setattr(namespace, dest, self._defaults[dest])
There are many details about 'defaults' that are not documented. This might
not be the most significant omission.
I have not seen many questions about the use of a preexisting namespace object
(here or on StackOverflow). While such a namespace can be used to set custom
defaults (as shown here), I think it is more useful when using a custom
Namespace class, one the defines special behavior.
Originally the main parser's namespace was passed to subparsers. But a change
in 2014, gave the subparser a fresh namespace, and then copied values from it
back to the main namespace. While that gave more power to the subparser's
defaults, users lost some ability to use their own namespace class.
https://bugs.python.org/issue27859 - argparse - subparsers does not retain
namespace
https://bugs.python.org/issue9351 - argparse set_defaults on subcommands should
override top level set_defaults
https://bugs.python.org/issue34827 - Make argparse.NameSpace iterable (closed)
----------
_______________________________________
Python tracker <[email protected]>
<https://bugs.python.org/issue38843>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com