能否让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
相关产品推荐
相关产品推荐

