Python使用argparse配置const参数时出现nargs相关报错如何解决?
报错原因与修复方案
错误根因
使用argparse模块的add_argument()方法时,const参数不能单独使用,必须搭配nargs='?'参数才能生效,否则就会抛出你遇到的ValueError('nargs must be %r to supply const' % OPTIONAL)报错。
两种修复方案
根据你的实际使用场景二选一即可:
方案1:仅需要设置参数默认值(最常用)
如果你只是希望用户不传对应参数时,自动使用你预设的路径,直接把const关键字改为default即可,不需要额外加其他参数:
parser = argparse.ArgumentParser() parser.add_argument('--username', type=str, required=True, help="Username to login. Required") parser.add_argument('--password', type=str, required=True, help="Password to login. Required.") # 将const改为default设置默认值 parser.add_argument('--chromedriver', type=str, default=r'C:\histdata\batfiles\chromedriver.exe') parser.add_argument('--output', type=str, default='C:\\histdata\\batfiles\\')
这种场景下,命令行传了参数就用用户输入的值,没传就用default里的预设值。
方案2:需要支持「仅传参数名不加值就用预设值」
如果你需要支持类似python xxx.py --chromedriver(后面不跟具体路径也能生效,用你预设的路径)的用法,就保留const,同时补充nargs='?'参数:
parser = argparse.ArgumentParser() parser.add_argument('--username', type=str, required=True, help="Username to login. Required") parser.add_argument('--password', type=str, required=True, help="Password to login. Required.") # 加nargs='?'搭配const使用 parser.add_argument('--chromedriver', type=str, nargs='?', const=r'C:\histdata\batfiles\chromedriver.exe') parser.add_argument('--output', type=str, nargs='?', const='C:\\histdata\\batfiles\\')
这种场景下的参数逻辑:
- 命令行完全没写该参数:返回
None(如果没额外设置default的话) - 命令行写了参数但没跟值:返回
const里的预设值 - 命令行写了参数也跟了值:返回用户输入的值
关键字区分
default:命令行完全不出现该参数时的返回值const:仅搭配nargs/特定action使用,参数出现但无传值时的返回值
内容的提问来源于stack exchange,提问作者user6090578
相关产品推荐
相关产品推荐

