前述
最近在寫腳本的時候想要實現一個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了。