parse_args 命名空间中不包含 None 值

qwr*_*qwr 6 python argparse nonetype

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

有没有办法避免parse_args在返回的命名空间中包含 None 值?以便

vars(ns) == {k:v for k,v in vars(ns).items() if v is not None}
Run Code Online (Sandbox Code Playgroud)

无需手动操作。

Jea*_*bre 10

是的,添加argument_default=argparse.SUPPRESS完整文档

为了全局抑制 parse_args() 调用上的属性创建,我们提供 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'])
Run Code Online (Sandbox Code Playgroud)

现在:

>>> ns
Namespace(x='X')
Run Code Online (Sandbox Code Playgroud)