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
posted @ 2024-04-18 10:06  沙滩炒花蛤  阅读(23)  评论(0编辑  收藏  举报