Python3 argparse set_defaults 不将字符串作为选项名称?

Qua*_*nic 2 python argparse python-3.x

我是 argparse 的新手,所以这可能是基础。

我更喜欢将所有字符串常量定义一次 ( blah = 'foo'),然后在整个代码中使用它。当我到达时set_defaults,似乎我仅限于 kwarg 类型的参数。

也就是说,parser.set_defaults(NUM=ONE)不将 NUM 视为字符串。这是一个更完整的例子:

ONE = 'one'
TWO = 'two'
SIX = 'six'
NUMBER_OPTS = [ONE, TWO, SIX]
NUM = 'num'

parser = argparse.ArgumentParser()
pform = parser.add_mutually_exclusive_group()
for opt in NUMBER_OPTS:
    pform.add_argument('--'+opt, dest=NUM, action='store_const', const=opt)
parser.set_defaults(NUM=ONE) # Can't find a syntax to make this DWIM
args = parser.parse_args()
print("%s is %s" % (NUM, vars(args)[NUM]))
Run Code Online (Sandbox Code Playgroud)

所以 whileadd_argument将字符串作为目的地,set_defaults而不是。

Dan*_*man 6

您可以使用字典扩展:

parser.set_defaults(**{NUM: ONE})
Run Code Online (Sandbox Code Playgroud)