【发布时间】:2018-08-06 14:25:15
【问题描述】:
当参数的验证在逻辑上取决于从其他参数解析的值时,我正在寻找一种 Pythonic 方法来验证参数。
这是一个简单的例子:
parser.add_argument(
'--animal',
choices=['raccoon', 'giraffe', 'snake'],
default='raccoon',
)
parser.add_argument(
'--with-shoes',
action='store_true',
)
在这种情况下,解析这个命令应该会导致错误:
my_script.py --animal snake --with-shoes
在这里添加mutually exclusive group 似乎没有帮助,因为其他组合都可以:
my_script.py --animal raccoon --with-shoes
my_script.py --animal raccoon
my_script.py --animal snake
my_script.py --animal giraffe --with-shoes
my_script.py --animal giraffe
理想情况下,验证错误不应与--animal 参数或--with-shoes 参数相关联,因为接口无法告诉您在此处需要更改哪个 值。每个值都有效,但不能组合使用。
我们可以通过对args 命名空间进行后处理来做到这一点,但我正在寻找一种会导致parser.parse_args() 调用失败的解决方案,即我们实际上在期间 参数解析失败,而不是之后。
【问题讨论】:
-
不直接回答你的问题,但我更喜欢使用 Click 因为它更适合这种事情:stackoverflow.com/a/44349292/7311767
-
谢谢,但我不喜欢使用 click,因为我不喜欢我的参数解析代码在函数上方的一堆装饰器中。它使 CLI 难以测试并且代码难以阅读。寻找
argparse解决方案。