【发布时间】:2023-01-11 21:59:25
【问题描述】:
是否可以告诉 argparse 在默认参数值上给出与在用户指定的参数值上相同的错误?
例如,以下不会导致任何错误:
parser = argparse.ArgumentParser()
parser.add_argument('--choice', choices=['a', 'b', 'c'], default='invalid')
args = vars(parser.parse_args()) # args = {'choice': 'invalid'}
而省略默认值并让用户在命令行上指定 --choice=invalid 将导致错误(如预期的那样)。
询问的原因是我希望用户能够在 JSON 文件中指定默认命令行选项,然后使用 ArgumentParser.set_defaults() 进行设置,但不幸的是,这会阻止验证这些用户指定的默认值。
【问题讨论】:
-
为什么不预处理并检查默认值是否在列表中?在运行时检查默认值是否是选择的一部分在逻辑上毫无意义。我的意思是,通常你应该设置两者......
-
@Tomerikoo,在我已经声明我认为有效输入作为设置解析器的一部分的意义上,这将涉及重复我自己。在上面的示例中,它将涉及检查选择是否是列表的一部分。但是对于布尔选项,例如我需要验证用户指定的值实际上是一个布尔值。简而言之,它将涉及复制解析器中已经存在的所有验证逻辑。
标签: python