在 argparse 中结合使用 `choices` 和 `action='extend'`

问题描述 投票:0回答:1

当与 python 3.8 中引入的

choice
结合使用时,我遇到了
argparse
中的
action='extend'
的极端情况:

from argparse import ArgumentParser

parser = ArgumentParser('test')
parser.add_argument('-x', '--x', action='extend', choices=list('XYZ'), type=list)
parser.parse_args(['-x', 'XXYYZZ'])

我的期望(也许是愿望)是

['X', 'X', 'X', 'Y', 'Y', 'Z', 'Z']
的每个元素都根据
choices
进行(成功)检查。相反,会打印以下错误消息:

usage: test [-h] [-x {X,Y,Z}]
test: error: argument -x/--x: invalid choice: ['X', 'X', 'Y', 'Y', 'Z', 'Z'] (choose from 'X', 'Y', 'Z')

有没有办法将

choices
应用于可迭代的每个元素,而不是整个元素? FWIW,如果我允许
action='extend'
的多个实例并使用
-x
代替,那么效果很好...
    

python argparse
1个回答
0
投票
action='append'

并将值 (

str
) 传递给参数,而不是单个组合字符串
"X", "Y", "Y", "Z"
这有效,

"XYYZ"


输出:

import argparse parser = argparse.ArgumentParser('test') parser.add_argument("-x", "--x", action="extend", nargs="+", type=str, choices=list('XYZ')) parser.parse_args(["-x", "X", "Y", "Y", "Z"])

© www.soinside.com 2019 - 2024. All rights reserved.