Author bethard
Recipients bethard
Date 2010-07-23.14:06:50
SpamBayes Score 0.00299849
Marked as misclassified No
Message-id <1279894012.43.0.0678646409.issue9351@psf.upfronthosting.co.za>
In-reply-to
Content
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:52bethardsetrecipients: + bethard
2010-07-23 14:06:52bethardsetmessageid: <1279894012.43.0.0678646409.issue9351@psf.upfronthosting.co.za>
2010-07-23 14:06:50bethardlinkissue9351 messages
2010-07-23 14:06:50bethardcreate