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

Python | 使用argparse解析命令行参数 今天是Python专题第27篇文章,我们来聊聊Python当中的命令行参数工具argparse。 命令行参数工具是我们非常常用的工具,比如当我们做实验希望调节参数的时候,如果参数都是通过硬编码写在代码当中的话,我们每次修改参数都需要修改对应的代码和逻辑显然这不太方便。比较好的办法就是把必要的参数设置成通过命令行传入的形式,这样我们只需要在运行的时候修改参数就可以了。 sys.argv 解析命令行传入参数最简单的办法就是通过sys.argv,sys.argv可以获取到我们通过命令行传入的参数。 import 阅读详情

在一个需要用到flag作为信号控制代码中一些代码片段是否运行的,比如"–flag True"或者"–flag False"。
但是古怪的是无法传入False,无论传入True还是False,程序里面都是True的参数,所以这个flag并没有生效,也就失去了意义。

参考代码:

import argparse


def test_bool():
    parser = argparse.ArgumentParser(description="This code is used to test bool value.")
    parser.add_argument("--flag",
                        type=bool,
                        default=True)
    args = parser.parse_args()
    print("# The type of flag: ", type(args.flag))
    print(args.flag is False)

    if args.flag:
        print(f"# Flag: {True}")
    else:
        print(f"# Flag: {False}")


if __name__ == '__main__':
    test_bool()

执行上面的代码:python3 test.py --flag False
按照执行的期望是输出# Flag: False,但是实际输出的结果是True:

(data_parse)  ~/Desktop/code/cython&numba  python3 test.py --flag False
# The type of flag:  <class 'bool'>
False
# Flag: True

为什么会出现这种情况呢?因为,在命令行的输入会被python认为是字符串,并不是布尔类型。

解决方式一【推荐】

更改代码为:

# ***
parser.add_argument("--flag",
                        action="store_true",
                        help="Run or not.")
# ***

这样的话,当你不输入–flag的时候,默认为False;输入–flag的时候,才会触发True值。
看执行结果:

(data_parse)  ~/Desktop/code/cython&numba  python3 test.py
# The type of flag:  <class 'bool'>
True
# Flag: False
(data_parse)  ~/Desktop/code/cython&numba  python3 test.py --flag
# The type of flag:  <class 'bool'>
False
# Flag: True

当然这种方式,你也可以指定action为store_false,不输入的时候–flag默认True,输入–flag触发False。

解决方式二

这种方式稍微复杂一些,就是需要自己去写一个函数对输入的字符串值进行一个转换,由字符串转换为布尔值。
代码:

import argparse


def str2bool(v):
    if isinstance(v, bool):
        return v
    if v.lower() in ('yes', 'true', 't', 'y', '1'):
        return True
    elif v.lower() in ('no', 'false', 'f', 'n', '0'):
        return False
    else:
        raise argparse.ArgumentTypeError('Boolean value expected.')


def test_bool():
    parser = argparse.ArgumentParser(description="This code is used to test bool value.")
    parser.add_argument("--flag",
                        type=str2bool,
                        default=True,
                        help="Run or not.")
    args = parser.parse_args()
    print("# The type of flag: ", type(args.flag))
    print(args.flag is False)
    if args.flag:
        print(f"# Flag: {True}")
    else:
        print(f"# Flag: {False}")


if __name__ == '__main__':
    test_bool()

这样的话,当我们只要输入自定义函数中的那些对应TrueorFalse的选项,就能能触发对应的布尔类型。
看执行情况:

(data_parse)  ~/Desktop/code/cython&numba  python3 test.py         
# The type of flag:  <class 'bool'>
False
# Flag: True
(data_parse)  ~/Desktop/code/cython&numba  python3 test.py --flag True
# The type of flag:  <class 'bool'>
False
# Flag: True
(data_parse)  ~/Desktop/code/cython&numba  python3 test.py --flag False
# The type of flag:  <class 'bool'>
True
# Flag: False
(data_parse)  ~/Desktop/code/cython&numba  python3 test.py --flag 0    
# The type of flag:  <class 'bool'>
True
# Flag: False
(data_parse)  ~/Desktop/code/cython&numba  python3 test.py --flag 1
# The type of flag:  <class 'bool'>
False
# Flag: True

由于默认了default的值为True,所以不输入–flag的时候就默认为True,然后输入–flag对应自定义func: str2bool()中的选项时,就能达到想要的开关效果。

程序中遇到问题该怎么解决Debug---Python argparse传入布尔参数false不生效 程序中遇到问题该怎么解决Debug例子一:解决办法:通过本文章得以解决:[Python argparse传入布尔参数false不生效](https://blog.youkuaiyun.com/qyhaill/article/details/101778806)原因: 例子一: 解决办法: 1、在百度中搜索: 2、搜索到的结果 通过本文章得以解决:Python argparse传入布尔参数false不生效 原因: 传入的都是string类型,转为bool型时,由于是非空字符串,所以转为True。 ... 阅读详情

相关推荐

【Python】argparse模块

argparse模块是Python标准库的一部分,旨在简化命令行接口的创建过程。它允许开发者定义程序接受哪些命令行参数,并自动解析这些参数,同时提供帮助信息和错误处理。以下是关于argparse模块更深入的理解,包括其基本用法、特性以及一些高级功能。

xiaodoudouer的博客 3600

Python——argparse传入布尔参数False不生效的解决方法

Python——argparse传入布尔参数False不生效的解决方法

Williamcsj的博客 411

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

主要介绍了python argparse传入布尔参数false不生效的解决,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

在用argparse的add_argument添加运行参数时,(bool类型)参数不生效

利用add_argument函数添加参数,并设置type=bool后,指定该参数类型为False之后你会发现它还是读成True。这是因为我们从控制台传入的都是字符串类型,在转换成bool类型时,只要它不是空串都会读成True。 以下是原代码: parser.add_argument("--have_sql", dest='have_sql', required=True, type=bool, help='hava sql?') 解决方法: 将type和require去掉,改成action=‘store_

WILDCHAP_的博客 2155

Howland电流源电路:从理论到实践的深度解析与优化策略

本文深度解析了Howland电流源电路的工作原理,从经典四电阻架构的“虚短”“虚断”分析,到其实现宽带恒流输出的理论优势。重点剖析了实践中因电阻精度、运放参数及PCB布局导致的性能瓶颈,并提供了引入第五电阻、优化运放选型等关键优化策略,旨在将输出阻抗从kΩ级提升至MΩ级,以满足精密测量与传感器驱动等应用需求。

weixin_29243063的博客 443

卷积码和Turbo码

通信原理相关博文目录:目录我们常在移动通信中遇到的卷积码就是一种非分组码,卷积码和信号处理中的卷积运算有关系吗?是不是就是信号处理中的卷积运算,先看看编码器的编码原理再说:下面是一个比较实用的卷积码编码器:它有三个移位寄存器D0,D1,D2和三个模2加法器,以及一个旋转开关组成,编码前,先将各级移位寄存器清零:现在假设输入的信息码元是1101:当输入的第一个码元为1时,三个模2加法器计算的结果都为...

Reborn Lee 2万+

python程序中命令行解析布尔(bool)类型参数的最全实现

在python程序中,如何在命令行中传递布尔(bool)类型参数, 并在程序中解析使用?

分享机器学习、深度学习、分布式计算、MLSys相关领域知识 3967

DINOv2 基于自定义数据集进行图片分类预测

(前提是安装好pytorch)1. pip安装2. 下载dinov2提供的预训练模型,需要自行前往网站上查找dinov2模型进行下载。模型需要下载三个文件:下载完成后将上述三个文件放置在本地一个名为dinov2_base的文件夹中即可。

sinat_34770838的博客 6666

吃灰的python笔记拿出来晒:函数的带*传参与不带*传参

带*传参与不带*传参 当想让列表赋值给*args,字典传参给**kwargs时 def func(*args, **kwargs): print(args, kwargs) func([1, 2, 3], {'1': 'a'}) func(*[1, 2, 3], **{'1': 'a'}) 运行结果: 可以看出,如果不加 * 和 ** ,参数会被前面的*args全部接收,后面的**args接收不到参数,与想达到的效果不一致。 ...

qq_41946404的博客 316

Python自动化车载测试:5分钟搞定CANoe COM接口调用(附完整代码)

本文详细介绍了如何使用Python快速实现CANoe COM接口调用,完成车载测试自动化。通过实战案例展示ECU信号测试框架搭建,包括环境配置、核心架构解析、信号读写封装及多线程安全方案,帮助开发者5分钟内掌握高效测试技巧。

vv45678的博客 1135

告别代码恐惧!用KRobot图形化编程,10分钟搞定Arduino巡线小车(附完整接线图)

本文介绍如何使用KRobot图形化编程工具快速搭建Arduino巡线小车,无需编写代码。从硬件准备到逻辑构建,详细讲解传感器数据处理、电机控制优化及高级功能扩展,帮助教育工作者和创客爱好者10分钟内完成项目。

weixin_30632089的博客 395

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

跑代码时,在命令行给python程序传入bool参数,但无法传入False,无论传入True还是False,程序里面都是True。下面是代码: parser.add_argument("--preprocess", type=bool, default=True, help='run prepare_data or not') ## 高端解决方案 使用可选参数store_true,将上述代码改为:...

qyhaill的博客 9430

colmap+openMVS稠密重建

简要记录一下colmap+openMVS稠密重建相关使用。

weixin_41631106的博客 2244

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

前言在一个需要用到flag作为信号控制代码中一些代码片段是否运行的,比如"--flag True"或者"--flag False"。但是古怪的是无法传入False,无论传入True还是False,程序里面都是True的参数,所以这个flag并没有生效,也就失去了意义。参考代码:# test.pyimport argparsedef test_bool():parser = argparse.Arg...

weixin_39603117的博客 780

Modbus协议学习第一篇之基础概念

因工作需要而接触Modbus,正在恶补知识,利用博客的方式来加深理解和记忆,同时希望同行大佬能一起交流。

hzf978742221的博客 881

移动端实战指南:深入理解 & 接入 IAB OMSDK

OMSDK(OpenMeasurementSDK)是IABTechLab推出的标准化测量工具,用于统一移动端/原生App广告的可见性和验证流程。其核心包括Native库(采集设备数据)和OMID JavaScript层(实现通信),通过标准化接口让开发者只需接入一套SDK即可兼容多个测量厂商,减少冲突和性能损耗。v1.4版本强化了对CTV和原生App场景的支持,而v1.5新增了画中画检测等功能。集成流程需通过IAB技术实验室注册下载,并遵循严格的命名空间规则。测试阶段需嵌入验证脚本并通过指定工具验证

帅次的博客 1193

python def 参数一直为false_python argparse传入布尔参数false不生效的解决

跑代码时,在命令行给python程序传入bool参数,但无法传入False,无论传入True还是False,程序里面都是True。下面是代码:parser.add_argument("--preprocess", type=bool, default=True, help='run prepare_data or not')高端解决方案使用可选参数store_true,将上述代码改为:parse....

weixin_39739846的博客 371

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

python argparse传入布尔类型参数的几种方式

python argparse传入布尔类型参数的几种方式

dream6985的博客 1948

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

在python中如何使用argparse更好地传入布尔值

在python中如何使用argparse更好地传入布尔值

芳樽里的歌的博客 1134

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

python中argparse模块实践

python的标准库模块argparse实践

lixiao2112924629的博客 1493

python之argparse传递bool值

前言 在一个需要用到flag作为信号控制代码中一些代码片段是否运行的,比如"–flag True"或者"–flag False"。 但是古怪的是无法传入False,无论传入True还是False,程序里面都是True的参数,所以这个flag并没有生效,也就失去了意义。 参考代码: # test.py import argparse def test_bool(): parser = argparse.ArgumentParser(description="This code is used to

非马梦衢的博客 1万+
上一篇: Python小技巧-代码优化
下一篇: Python中os._exit(), sys.exit(), exit() 的区别
Python热爱者
博客等级 码龄7年 3056粉丝 1330原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值