ai didi

python - argparse:如何配置多选、多值、可选参数?

转载 作者:行者123 更新时间:2023-12-05 03:33:07 24 4
gpt4 key购买 nike

我正在尝试设置一个参数,该参数接受给定选项列表中的一个或多个值,但不是强制性的。我正在尝试这个(有几个变体也没有按预期工作):

parser.add_argument("FLAGS", nargs='*', choices=["X","Y","Z","ALL"])

我希望从选项列表中得到一个值列表,如果没有给出任何值,我希望得到一个空列表(我认为,应该由 nargs='*' 强制执行)。但无论我是否添加 default="" ,当我不传递任何参数时,它都会失败:

error: argument FLAGS: invalid choice: []

如何实现我所需要的?

最佳答案

这可能不符合您的需求,但您可以使用 --flags 等选项轻松完成。

parser.add_argument(
"--flags",
nargs='*',
default=[], # Instead of "None"
choices=["X", "Y", "Z", "ALL"])

args = parser.parse_args()
print(args)
$ tmp.py
Namespace(flags=[])

$ tmp.py --flags
Namespace(flags=[])

$ tmp.py --flags X
Namespace(flags=['X'])

$ tmp.py --flags X Z
Namespace(flags=['X', 'Z'])

$ tmp.py --flags foobar
usage: tmp.py [-h] [--flags [{X,Y,Z,ALL} ...]]
tmp.py: error: argument --flags: invalid choice: 'foobar' (choose from 'X', 'Y', 'Z', 'ALL')

$ tmp.py --help
usage: tmp.py [-h] [--flags [{X,Y,Z,ALL} ...]]

optional arguments:
-h, --help show this help message and exit
--flags [{X,Y,Z,ALL} ...]

关于python - argparse:如何配置多选、多值、可选参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70370597/

24 4 0
文章推荐: f# - 使用 FSPickler 将二进制反序列化为另一种类型
文章推荐: android-toast - 为什么在 Android 12 APi 31 上安装应用时 toasts 会被截断
文章推荐: microsoft-graph-api - Microsoft Graph DriveItem 内容流?
文章推荐: linux - 如何验证 github SSH key
行者123
个人简介

我是一名优秀的程序员,十分优秀!

滴滴打车优惠券免费领取
滴滴打车优惠券
全站热门文章
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com