python argparse传入布尔参数false不生效的解决

下面是关于“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_truestore_false作为action参数,它们会将参数解析为TrueFalse,而不是将其作为字符串进行解析。然而,当我们使用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技术站

(0)
上一篇 2023年6月3日
下一篇 2023年6月3日

相关文章

  • 使用python,自动确定用户当前时区的最准确方法是什么

    【问题标题】:Using python, what is the most accurate way to auto determine a users current timezone使用python,自动确定用户当前时区的最准确方法是什么 【发布时间】:2023-04-04 17:16:01 【问题描述】: 我已经验证 dateutils.tz.tzlo…

    Python开发 2023年4月6日
    00
  • python实现带声音的摩斯码翻译实现方法

    Python实现带声音的摩斯码翻译实现方法 本文将介绍Python如何实现带声音的摩斯码翻译。使用摩斯码是一种常见的编码方式,用于传输文本信息。在本文中,将通过Python编程语言实现用户输入文本转换为摩斯码的过程,并将其转换为声音输出。 实现步骤 步骤1:定义摩斯码表 摩斯码表是将字符转换为摩斯码序列的关键所在。我们首先需要定义一个包含英文字母、数字和符号…

    python 2023年6月5日
    00
  • 如何通过python的fabric包完成代码上传部署

    一、什么是fabric Fabric是一个用Python编写的命令行工具,可简化使用SSH执行远程命令和部署应用程序的过程。Fabric提供了一个高层次的操作界面,使得可以轻松地将操作在远程服务器上进行。Fabric还支持串联一系列的操作,并允许根据执行结果来采取不同的操作。Fabric可以处理本地和远程任务,并使用SSH进行通信。 二、安装fabric 使…

    python 2023年5月23日
    00
  • Python基础学习函数+模块+类

    Python基础学习——函数、模块和类 在Python中,函数、模块和类都是非常重要的基础知识。 函数 函数是一块可重用的代码,它接受输入并返回输出。函数的优点是可以提高代码的可读性和重复利用性。 函数的定义和调用 在Python中,定义函数的语法为: def function_name(parameter1, parameter2, …): # fun…

    python 2023年6月5日
    00
  • python生成遍历暴力破解密码的方法

    生成遍历暴力破解密码的方法是指使用Python编程语言生成多个密码组合并逐一尝试的方法,以便找出给定的秘密密码。下面是一些步骤和示例代码,用于演示如何实现这一方法: 导入必要的库 要使用Python进行暴力破解密码,需要使用一些标准库和第三方库,其中最重要的是“itertools”库和“string”库。这些库可以通过导入语句引入Python程序中,如下所示…

    python 2023年6月3日
    00
  • Python matplotlib可视化实例解析

    Python matplotlib可视化实例解析 Python的matplotlib库是一个非常强大的数据可视化工具,可以用于绘制各种类型的图表,包括折线图、散点图、柱状图、饼图等。本文将介绍如何使用matplotlib库进行数据可视化,并提供两个示例。 步骤1:安装matplotlib库 在使用matplotlib库之前,需要先安装它。可以使用以下命令在命…

    python 2023年5月15日
    00
  • python实现打印类的所有属性和方法

    要实现打印类的所有属性和方法,可以通过dir()函数获取类的所有成员。dir()函数返回的是一个字符串列表,包含了对象或者类所定义的所有属性、方法以及内建的属性、方法。接下来可以遍历这个列表,对于每个元素进行处理,输出属性或者方法名。 下面是一个示例代码: class MyClass(object): i = 123 def __init__(self, n…

    python 2023年6月5日
    00
  • 详解Python中的正则表达式的用法

    详解Python中的正则表达式的用法 正则表达式是一种强大的文本处理工具,可以用于匹配、搜索、替换和分割文本。Python中的re模块提供了对正则表达式的支持,使得我们可以在中使用正则表达式。本文将为您详细讲解Python的正则表达的用法。 正则表达式的基语法 则表达式是由一系列字符和特殊字符组成的模式,用于匹配文本中的字符串。下面是些常用的正则表达式的特殊…

    python 2023年5月14日
    00
合作推广
合作推广
分享本页
返回顶部