作者:BOSS | 来源:互联网 | 2023-02-05 14:14
我在Python 3.6中使用argparse.我使用可选参数来收集我的程序参数.对于其中一些,我有合理的默认值,因此我使用该参数的默认值配置解析器.
In [2]: import argparse
...: import shlex
...:
...: parser = argparse.ArgumentParser()
...: parser.add_argument('-s', '--samples', action='store', nargs='+', type=int, required=True,
...: help='number of samples')
...: parser.add_argument('-r', '--regions', action='append', nargs='+', type=str, default=['all'],
...: help='one or more region names. default to [\'all\']')
当没有指定-r/ - regions参数时,我希望看到配置的默认值(我这样做).
In [3]: s = '-s 37'
...: parser.parse_args(shlex.split(s))
Out[3]: Namespace(regiOns=['all'], samples=[37])
在指定-r/ - regions参数时,我希望只看到我为参数提供的值,但默认情况也会显示.
In [5]: s = '-s 37 -r foo'
...: parser.parse_args(shlex.split(s))
Out[5]: Namespace(regiOns=['all', ['foo']], samples=[37])
这不是我的预期.我希望只有在不存在可选参数时才会出现默认值.我逐步完成了argparse代码.我找不到包含默认值的位置.根据注释,似乎逻辑是在处理提供的实际参数值之前将默认值添加到结果命名空间.我本来期望它是相反的(即只有当你到达args的末尾并且没有看到具有默认值的参数时才应用默认值.
任何人都可以阐明这一点吗?我是否错误地使用或理解了可选参数的默认选项的用途?有没有办法实现我正在寻找的行为(即如果未提供可选项,请使用命名空间中的默认值)?