下面是关于“python argparse传入布尔参数false不生效的解决”的完整攻略。
问题描述
在使用argparse
模块解析命令行参数时,传入布尔类型的参数false
时,该参数并没有被解析为False
,而是被解析为True
。例如,我们定义了如下的命令行参数:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--verbose", default=True, action="store_false", help="print verbose output")
args = parser.parse_args()
当我们通过--verbose false
或者--verbose=False
或者--no-verbose
等方式传入false
作为参数时,程序并没有按照我们的预期将其解析为False
。
解决方法
在argparse
模块中,如果我们使用store_true
或store_false
作为action
参数,它们会将参数解析为True
或False
,而不是将其作为字符串进行解析。然而,当我们使用default
参数设置了参数的默认值时,如果我们通过命令行传入布尔类型的参数false
,它并不能正确的被解析为False
。要解决这个问题,我们需要添加一个type
参数,将其指定为str2bool
函数。
import argparse
def str2bool(v):
"""
将字符串转换为布尔类型
"""
return v.lower() in ("yes", "true", "t", "1")
parser = argparse.ArgumentParser()
parser.add_argument("--verbose", default=True, action="store_false", type=str2bool, help="print verbose output")
args = parser.parse_args()
在上面的代码中,我们定义了一个str2bool
函数,它可以将字符串转换为布尔类型。在argparse
模块的参数定义中,我们将type
参数设置为str2bool
,这样无论我们使用什么样的字符串,它都能正确的被解析为布尔类型。
示例说明
下面,我们使用两个示例来说明如何解决argparse
模块传入布尔类型参数false
不生效的问题。
示例一
假设我们有一个test.py
文件,代码如下:
import argparse
def str2bool(v):
"""
将字符串转换为布尔类型
"""
return v.lower() in ("yes", "true", "t", "1")
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("--verbose", default=True, action="store_false", type=str2bool, help="print verbose output")
args = parser.parse_args()
print("verbose:", args.verbose)
我们在终端中运行python test.py --verbose=false
,如果没有添加type
参数,程序会输出verbose: True
。但是,如果我们添加了type
参数,程序就会正确输出verbose: False
。
示例二
假设我们有一个test.py
文件,代码如下:
import argparse
def str2bool(v):
"""
将字符串转换为布尔类型
"""
return v.lower() in ("yes", "true", "t", "1")
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("--debug", default=False, action="store_true", help="enable debug mode")
args = parser.parse_args()
print("debug:", args.debug)
我们在终端中运行python test.py --debug false
,如果没有添加type
参数,程序会输出debug: True
。但是,如果我们添加了type
参数,程序就会正确输出debug: False
。
以上就是关于“python argparse传入布尔参数false不生效的解决”的完整攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python argparse传入布尔参数false不生效的解决 - Python技术站