前述
最近在写脚本的时候想要实现一个if 操作,通过用户输入。确定要不要启用某个语句。
非常自然的就是使用python的argparse包,但是发现了一个陷阱,记录下。
陷阱
argparse.ArgumentParser()
可以指定输入类型,我可以设定为bool,但是发现这个不太能用,具体为如果我设定类型为bool,不管我输入什么,输出都是True
具体代码如下:
import argparsedef main():parser = argparse.ArgumentParser()parser.add_argument('--o1', type=bool, default=False)args = parser.parse_args()if args.o1: print("o1 is True")else:print("o1 is False")if __name__ == '__main__':main()
不指定的话默认为Flase,输出如下
如果指定True的话,输出为True
好像没啥问题,但是如果指定False,却出现了True
因此这种这种方式不太可行,任何指定参数的行为都会被判定为True。
正确做法
使用action='store_true'
对比代码如下:
import argparsedef main():parser = argparse.ArgumentParser()parser.add_argument('--o1', type=bool, default=False)parser.add_argument('--o2', action='store_true', default=False)args = parser.parse_args()if args.o1: print("o1 is True")else:print("o1 is False")if args.o2:print("o2 is True")else:print("o2 is False")if __name__ == '__main__':main()
如果没有指定,都是False
如果指定了o2,直接变成True,也不需要输入False和True了。