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

yizhihongxing

下面是关于“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日

相关文章

  • pygame实现时钟效果

    下面是关于用Pygame实现时钟效果的完整攻略,包含了步骤、代码示例和详细说明。 步骤 导入Pygame库。因为本文所讲的内容涉及到窗口绘图操作,所以需要用到Pygame库。 python import pygame 初始化Pygame。在继续之前,需要对Pygame进行初始化。 python pygame.init() 设定窗口大小。根据自己的需要,设定窗…

    python 2023年6月2日
    00
  • python读文件的步骤

    当我们需要处理文本文件时,最常见的操作之一就是读取文件。Python提供了简单易用的文件读取操作。下面是Python读取文件的完整攻略: 步骤一:打开文件 要读取文件,首先需要使用Python内置函数open()来打开文件并得到文件对象。语法如下: file_object = open(file_path, access_mode) 其中,file_path…

    python 2023年6月5日
    00
  • 分步骤教你用python一步步提取PPT中的图片

    以下是详细的“分步骤教你用python一步步提取PPT中的图片”的攻略: 一、获取PPT文件并导入必要的库 首先需要用Python获取要提取图片的PPT文件,可以使用Python的os或glob库来读取文件。接下来,我们需要导入pptx和PIL这两个库,pptx库是Python处理PPT文件的重要库,PIL库用来处理图片。 import os from pp…

    python 2023年6月3日
    00
  • Python制作数据导入导出工具

    下面是关于“Python制作数据导入导出工具”的完整攻略: 概述 在进行数据分析的过程中,通常会需要处理大量的数据,而这些数据往往不是来自于同一个系统或者同一个格式,比如可能是Excel表格、CSV文件、数据库等等。因此,在进行数据导入导出的过程中,需要用到一些工具来进行数据格式转换和处理。Python是一门非常流行的编程语言,也拥有众多的数据处理库,因此使…

    python 2023年6月3日
    00
  • Python request设置HTTPS代理代码解析

    以下是关于“Python request设置HTTPS代理代码解析”的完整攻略: Python request设置HTTPS代理代码解析 在Python中,我们可以使用requests库发送HTTP请求。如果需要设置HTTPS代理,我们可以使用proxies参数。以下是Python request设置HTTPS代理代码解析的攻略。 设置单个HTTPS代理 我…

    python 2023年5月15日
    00
  • python实现上传下载文件功能

    Python实现上传下载文件功能 在Python中,实现上传下载文件功能是一个常见的需求。以下是一个示例,介绍了如何使用Python实现上传下载文件功能。 示例一:使用Python实现文件上传功能 以下是一个示例,可以使用Python实现文件上传功能: import requests url = ‘http://example.com/upload’ fil…

    python 2023年5月15日
    00
  • python爬虫智能翻页批量下载文件的实例详解

    下面是“Python爬虫智能翻页批量下载文件的实例详解”的完整攻略。 爬虫目标 本次爬虫的目标是爬取一个免费的学术期刊网站上的文章,包括文章标题、作者、摘要和全文PDF。这个网站的每一页都有10篇文章,每个栏目下的文章总数不确定,因此需要智能翻页爬取。 准备工作 在开始之前,需要安装Python和一些必要的库,如requests,BeautifulSoup等…

    python 2023年6月3日
    00
  • python随机模块random的22种函数(小结)

    Python随机模块random的22种函数(小结) Python的random模块提供了许多用于生成随机数的函数。本文将介绍random模块的22种函数,包括生成随机整数、随机浮点数、随序列、随机字符串等。每个函数都提供了详细的说明和示例代码,方便读者学习和实践。 1. random.random() random.random()函数用于生成一个0到1之…

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