You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中使用argparse出现invalid choice错误问题求助

问题解决

你的代码存在两个关键错误,导致输入red时出现无效值错误:

1. Enum枚举定义错误

原代码中枚举成员列表的写法有误:

Color = Enum("Color", ["red", "green," "blue"])

这里"green," "blue"会被Python自动拼接成单个字符串"green,blue",导致枚举实际只有两个成员:red和green_blue(枚举会自动将非标识符字符转为下划线)。正确的写法应该是用逗号分隔三个独立的字符串:

Color = Enum("Color", ["red", "green", "blue"])

2. argparse类型转换错误

直接将type=Color传给add_argument会导致argparse调用Color("red"),而Enum的构造函数是按成员的value(默认是整数1、2、3)查找,不是按name(字符串"red")查找,因此会报错。需要自定义类型转换逻辑,通过成员名称获取枚举实例。

修正后的完整代码

from argparse import ArgumentParser
from enum import Enum

Color = Enum("Color", ["red", "green", "blue"])

def parse_color(s):
    try:
        return Color[s]
    except KeyError:
        raise ValueError(f"invalid Color value: '{s}'")

parser = ArgumentParser()
parser.add_argument("color", type=parse_color, choices=list(Color))
args = parser.parse_args()
print(f"your color is {args.color}")

class test:
    def __init__(self):
        self.a = 1
        self.b = 2

更简洁的写法

可以用lambda表达式替代自定义函数:

parser.add_argument("color", type=lambda s: Color[s], choices=list(Color))

现在执行python test.py red,就能正常输出your color is Color.red了。

内容的提问来源于stack exchange,提问作者user21208477

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 16:46:14