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

能否让argparse对默认参数值执行与用户指定参数相同的校验?

argparse默认参数值能否触发与用户输入相同的校验错误?

问题场景

当使用argparse的choices参数限定选项范围时,即使设置的默认值不在选项列表内,程序也不会触发错误:

parser = argparse.ArgumentParser()
parser.add_argument('--choice', choices=['a', 'b', 'c'], default='invalid')

args = vars(parser.parse_args())            # 结果为 {'choice': 'invalid'},无报错

但如果用户在命令行手动指定--choice=invalid,则会触发预期的参数错误。

需求背景

我需要让用户通过JSON文件指定命令行参数的默认值,再通过ArgumentParser.set_defaults()将这些值设置为参数默认值,但当前argparse的行为导致这些用户自定义的默认值无法被校验。

行为不一致问题

argparse的校验逻辑存在不一致性:当使用type参数指定类型时,非法的默认值会正常触发错误:

parser = argparse.ArgumentParser()
parser.add_argument('--num', type=int, default='foo')

args = parser.parse_args()      # 未在命令行指定--num时,会触发类型转换异常

我已向CPython提交相关bug报告。

内容的提问来源于stack exchange,提问作者Ton van den Heuvel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 15:20:29