Issue9351
Created on 2010-07-23 14:06 by bethard, last changed 2010-07-23 14:06 by bethard.
| Messages (1) | |||
|---|---|---|---|
| msg111324 - (view) | Author: Steven Bethard (bethard) * ![]() |
Date: 2010-07-23 14:06 | |
If you use set_defaults on a subparser, but a default exists on the top level parser, the subparser defaults are ignored:
>>> parser = argparse.ArgumentParser()
>>> xparser = parser.add_subparsers().add_parser('X')
>>> parser.set_defaults(foo=1)
>>> xparser.set_defaults(foo=2)
>>> parser.parse_args(['X'])
Namespace(foo=1)
This is counter to what people probably expect, that the subparser, when selected, would override the top level parser.
The behavior is because of the following code in parse_known_args:
for dest in self._defaults:
if not hasattr(namespace, dest):
setattr(namespace, dest, self._defaults[dest])
This happens before the subparser sees the namespace object, and so the subparser sees that no defaults need to be filled in.
|
|||
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2010-07-23 14:06:50 | bethard | create | |
