New submission from Lucca Ruhland <lucca.ruhl...@gmail.com>:

When parsing arguments with a namespace object, the subparser are behaving 
different than the main parser, although this is not stated in the 
documentation.

Each attribute which is not already part of the namespace, should be saved into 
the namespace object.
Therefore any already existing namespace attribute should overwrite the default 
value of any argument which is not explicitly set. 

While this is true for the parent parser, it does not work for the subparser.
Here is a small example code:
------------------------------------------------------------------------
import argparse

parser = argparse.ArgumentParser()
parser.add_argument('--root', type=str, default='.')
subparsers = parser.add_subparsers()
subparser = subparsers.add_parser('subp')
subparser.add_argument('--subroot', type=str, default='./subdir')
our_args = argparse.Namespace(root="./config_root", subroot="./config_subdir")

argv = ['subp']
args = parser.parse_args(argv, namespace=our_args)
print(args)
------------------------------------------------------------------------
>>> Expected: Namespace(root='./config_root', subroot='./config_subdir')
>>> Output: Namespace(root='./config_root', subroot='./subdir')

When calling the subparser, the namespace attribute is overwritten by the 
default value.

----------
assignee: docs@python
components: Documentation
messages: 376183
nosy: docs@python, lucca.ruhland
priority: normal
severity: normal
status: open
title: argparse: unexpected subparser behaviour on parse_args with namespace 
option
type: behavior
versions: Python 3.8

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue41684>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to