为了账号安全,请及时绑定邮箱和手机立即绑定

带选择选项的条件 argparse

带选择选项的条件 argparse

幕布斯7119047 2022-01-05 10:04:51
以下是我在模块中编写的三个参数。parser.add_argument('--Type',type=str,choices=['a','b','c'],help='Options include: a,b,c.',required=True)parser.add_argument('--Input',default=False,help='Generate input files',required=False)parser.add_argument('--Directory',default=False,help='Secondary directory',required='--Input' in sys.argv)在--TypeA,B,C:有三个选项是可能的。目前,我已将其设置为,如果 --Directory 为真,则需要 --Input 为真。但是,我想向 --Directory 添加一个附加条件,以要求 --Type 为 == 'c'。如何更改 --Directory 参数中的必需选项,使其同时需要 --Input 和 --Type == 'c'?
查看完整描述

3 回答

?
湖上湖

TA贡献2003条经验 获得超2个赞

将参数解析与您的需求分离。


parser.add_argument('--Type', choices=['a','b','c'], required=True)

parser.add_argument('--Input', action='store_true')

parser.add_argument('--Directory', action='store_true')


args = parser.parse_args()


if args.Directory and args.Type != 'c' and not args.input:

    raise argparse.ArgumentError("--Directory requires --Type c and --Input")

(注意action='store_true'自动设置type=bool和default=False。)


查看完整回答
反对 回复 2022-01-05
?
森栏

TA贡献1810条经验 获得超5个赞

我不会将required参数用于这些事情中的任何一个,它有点容易出错并且不太可读。只需在解析后检查参数的有效性。


import argparse


if __name__ == '__main__':

    parser = argparse.ArgumentParser()

    parser.add_argument('--Type', type=str, choices=['a','b','c'], help='Options include: a,b,c.', required=True)

    parser.add_argument('--Input', default=False, help='Generate input files', required=False)

    parser.add_argument('--Directory', default=False, help='Secondary directory', required=False)

    parsed_args = parser.parse_args()

    if parsed_args.Directory and not (parsed_args.Input and parsed_args.Type == 'c'):

        parser.error('option --Directory requires --Input and --Type c.')


查看完整回答
反对 回复 2022-01-05
?
MMMHUHU

TA贡献1834条经验 获得超8个赞

这不是最漂亮的,但您可以查看旁边的参数--Type并检查它是否等于'c'这样:


parser.add_argument('--Directory', default=False, help='secondary directory',

                    required=('--Type' in sys.argv and

                              sys.argv[sys.argv.index('--Type') + 1] == 'c')

                   )


查看完整回答
反对 回复 2022-01-05
  • 3 回答
  • 0 关注
  • 171 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信