Search code examples
pythonargparsenonetype

parse_args do not include None values in Namespace


parser = argparse.ArgumentParser(prog='PROG')
parser.add_argument('-x')
parser.add_argument('--foo')
ns = parser.parse_args(['-x', 'X'])  # Namespace(foo=None, x='X')

Is there any way to have parse_args avoid including None values in the returned Namespace? So that

vars(ns) == {k:v for k,v in vars(ns).items() if v is not None}

without doing it manually.


Solution

  • yes, add argument_default=argparse.SUPPRESS (full doc)

    to globally suppress attribute creation on parse_args() calls, we supply argument_default=SUPPRESS:

    import argparse
    
    parser = argparse.ArgumentParser(prog='PROG',argument_default=argparse.SUPPRESS)
    parser.add_argument('-x')
    parser.add_argument('--foo')
    ns = parser.parse_args(['-x', 'X'])
    

    now:

    >>> ns
    Namespace(x='X')