Python argv“假,假”被识别为真[重复]
Posted
技术标签:
【中文标题】Python argv“假,假”被识别为真[重复]【英文标题】:Python argv "False, false' are recognized as True [duplicate] 【发布时间】:2021-05-28 14:25:30 【问题描述】:我使用下面的行运行我的程序
python ***.py --if_normalize False
但我的程序将if_normalize
变量识别为True
def parse_args():
parser = argparse.ArgumentParser()
parser.add_argument("--work-path", required=True, type=str)
parser.add_argument("--seed", default=42, type=int, help="Random seed")
parser.add_argument("--batch-size", default=128, type=int)
parser.add_argument("--attack", default='no', type=str)
parser.add_argument("--gpu",default=2, type=int)
parser.add_argument('--if_normalize', default=False, type=bool)
return parser.parse_args()
args = parse_args()
print(args)
它打印 if_normalize is True
我通过了 'False, false, -1' 但它仍然识别为 True
【问题讨论】:
argparse
通常将参数用作“是否存在”而不是 True/False。所以parser.add_argument('--normalize', action='store_true')
更合适。它要么在运行脚本时作为参数给出(True
),要么根本不给出(False
)。或与action='store_false'
反过来。如果你真的想要--if_normalize True/False
,那么see the top 3 answers here。
【参考方案1】:
因为它只是通过bool
运行输入,而bool('False')
是True
,因为任何非空字符串都是真实的。
您通常会使用 flag 来代替:
parser.add_argument('--if-normalize', action='store_true')
store_true
操作意味着默认为 False
,如果存在该标志,则将其设置为 True
。 IE。你会像这样使用它:
$ python ***.py --if-normalize
【讨论】:
【参考方案2】:您应该更改为以下内容:
parser.add_argument('--if_normalize', action='store_true')
当您在调用脚本时将参数if_normalize
添加到命令行参数时,这会将参数True
设置为True
。
您可以参考docs 并查看它的确切作用。
【讨论】:
【参考方案3】:https://docs.python.org/3/library/argparse.html#type
不建议将 bool() 函数用作类型转换器。它所做的只是将空字符串转换为 False,将非空字符串转换为 True。这通常不是我们想要的。
此type
部分最近进行了扩展,旨在消除一些常见的误解,包括对bool
(内置)函数的滥用。
您可以编写自己的函数来解析一大堆“是/否”字。开发人员拒绝这样做,因为有太多的替代方案,特别是如果包括非英语的可能性。
store_true
Action
对于大多数用途来说已经足够了。
【讨论】:
以上是关于Python argv“假,假”被识别为真[重复]的主要内容,如果未能解决你的问题,请参考以下文章