argparse 参数 True False
# test.py
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--local", type=bool, default=True, help="local or remote")
parser.add_argument("--role", type=str, default="train", help="sample or train, when use remote",)
args = parser.parse_args()
print(args.local,args.role)
想要将 local 设置为 False 时,发现无论赋值哪个假结果都是真,是赋值没成功吗?可以是看role却赋值成功了
$ python test.py --local False --role test
True test
$ python test.py --local false --role test
True test
$ python test.py --local remote --role test
True test
在argparse中,type=bool并不会将值解析为布尔类型,非空字符串会被解析为True,而空字符串""会被解析为False。因此,如果使用--local True或者--local False,它们都会被解析为字符串类型的"True"和"False",而非实际布尔类型的True和False。
方法一:空字符串赋值 False
$ python test.py --local '' --role test
False test
方法二:用 action='store_true'或action='store_false'替代 type=bool
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--local", action='store_true', help="local or remote")
parser.add_argument("--role", type=str, default="train", help="sample or train, when use remote",)
args = parser.parse_args()
print(args.local,args.role)
$ python test.py --local --role test
True test
$ python test.py --role test
False test