New submission from Steven Bethard <steven.beth...@gmail.com>: 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. ---------- components: Library (Lib) messages: 111324 nosy: bethard priority: normal severity: normal stage: needs patch status: open title: argparse set_defaults on subcommands should override top level set_defaults type: behavior versions: Python 2.7, Python 3.2 _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue9351> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com