如何在argparse中实现单独传入flag时设默认值,不传则不设置?
解决方案
直接用argparse自带的参数就能搞定,不用自定义action。调整add_argument的参数即可:
import argparse parser = argparse.ArgumentParser() parser.add_argument('-c', '--cookies', nargs='?', const=5, # 仅传入-c但不指定数量时的默认值 default=None, # 不传入-c时的默认值 type=int, ) args = parser.parse_args() if args.cookies is not None: print(f'cookies flag is set: {args.cookies}') else: print('cookies flag not set')
逻辑说明
- 当用户仅输入
-c(或--cookies)但不跟数值时,args.cookies会被设为const指定的5 - 当用户输入
-c 25这类带数值的命令时,直接使用指定的数值 - 完全不传入
-c参数时,args.cookies为None,代表用户不需要饼干
之前的问题在于把default设成了5,导致即使没主动请求也会分配默认值。换成None作为default,配合const处理仅传flag的场景,正好匹配你想要的三种情况。
内容的提问来源于stack exchange,提问作者Jon
相关产品推荐
相关产品推荐

