如果我有一个带可选参数值的可选参数,有没有办法验证在没有给出值时是否设置了参数?
例如:
parser = argparse.ArgumentParser()
parser.add_argument('--abc', nargs='?')
args = parser.parse_args()
Run Code Online (Sandbox Code Playgroud)
会正确地给我:
optional arguments:
--abc [ABC]
Run Code Online (Sandbox Code Playgroud)
我如何区分下面的1和2?
...
更新:
找到解决这个问题的技巧:你可以使用"nargs ='*'"代替"nargs ='?'".这种方式#1将返回None,而#2将返回空列表.缺点是这将允许接受参数的多个值; 因此,如果合适,您需要添加支票.
或者,您也可以为参数设置默认值; 看看chepner和Anand S Kumar的回答.
使用nargs='?',您可以同时提供default和const。
In [791]: parser=argparse.ArgumentParser()
In [792]: parser.add_argument('--abc', nargs='?', default='default', const='const')
Run Code Online (Sandbox Code Playgroud)
如果未提供参数,则使用默认值:
In [793]: parser.parse_args([])
Out[793]: Namespace(abc='default')
Run Code Online (Sandbox Code Playgroud)
如果给定,但没有参数字符串,则使用const:
In [794]: parser.parse_args(['--abc'])
Out[794]: Namespace(abc='const')
Run Code Online (Sandbox Code Playgroud)
否则,它将使用参数字符串:
In [795]: parser.parse_args(['--abc','test'])
Out[795]: Namespace(abc='test')
In [796]: parser.print_help()
usage: ipython3 [-h] [--abc [ABC]]
optional arguments:
-h, --help show this help message and exit
--abc [ABC]
Run Code Online (Sandbox Code Playgroud)
为该选项使用不同的默认值。比较
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--abc', nargs='?', default="default")
>>> parser.parse_args()
Namespace(abc='default')
>>> parser.parse_args(['--abc'])
Namespace(abc=None)
>>> parser.parse_args(['--abc', 'value'])
Namespace(abc='value')
Run Code Online (Sandbox Code Playgroud)
我不确定如何在--abc不带参数的情况下使用 when 提供不同的值,除非使用自定义操作而不是nargs参数。
| 归档时间: |
|
| 查看次数: |
1396 次 |
| 最近记录: |