python学习之argparse模块——易错点以及重点总结

本文主要记录一下自己遇到的一个非常坑的bug,真的是搞了我好几天才调出来,一开始甚至都怀疑机器坏了。。。(虽然显然不可能,机器永远是对的
好了,下面直入话题,我犯的错误就是该模块中的type选项,这个涉及到的内容非常容易出错。
在开始时我一直觉得只要学会使用default选项以及知道如何在终端中设置值就可以了,其实还有很多细节需要注意,下面重点讲一下一些容易忽视的选项在什么场景下使用。

type选项

type可以指定为int,bool,list,str等,默认情况下为str,我们从命令行里传入的内容一开始的type都是字符串类型,argparse库自动根据你指定的type调用对应的转换函数,但是default和终端时候不一样的,你写的内容是什么格式就对应什么格式,举个例子(一个非常常见的错误):

import argparse

parser = argparse.ArgumentParser(description='bool测试')
parser.add_argument('--flag', type=bool, default=False)
args = parser.parse_args()
print(args.flag)

  • 假如你在终端中用python demo.py --flag=False,那么最终的结果你会发现,最终会打印出True,因为终端读进去的是字符串类型,库函数后台的type=bool转换规则是非空串都是True,只有传入''才是False
  • 假如你没有指定type=bool,那默认读取的就是字符串类型,后面如果你用到了if args.flag最后的判断结果永远是True

关于bool类型,推荐的设置方式如下方式:

action

parser.add_argument('--flag', action='store_true')

store_true表示设置了就是True,终端运行,python demo.py --flag打印就是True,这个时候就没有必要用default选项了。

required

parser.add_argument('--flag', required=True)

可以使用这个选项设置需要在终端中强制设置该参数,在需要调参时非常重要,因为你不一定什么时候用了default参数就给整错实验配置了。但是这个参数和action显然不能同时使用

nargs

用来说明传入的参数个数,'+'表示传入至少一个参数,这一参数常常用在需要传入列表的时候,如下面这个例子:

import argparse
parser = argparse.ArgumentParser()
## nargs='+'接受1个或多个参数,
## nargs='*'接受零个或多个
parser.add_argument('--list', nargs='+', help='<Required> Set flag', required=True)
args = parser.parse_args()

if __name__ == '__main__':
    print(args.list)

这个参数主要用在需要再终端中传入列表的情形,运行时传入参数之间用空格间隔,注意:指定type=list是不能满足要求的,读者此处可以试一下看看
终端运行:python demo.py --list 2 3 4得到结果为['2', '3', '4'],可以看到程序是将每个数据转成str,然后拼接起来,如果要求最后的结果是int,需要指定type=int,这样列表中的元素就都是整形了。
如下面这个例子:

parser.add_argument('--list', nargs='+', type=int,
                    help='<Required> Set flag', default=[1, 2, 3, 4])
args = parser.parse_args()
if __name__ == '__main__':
    print(args.list)

这样就既可以在终端中指定,也可以用默认的了。

  • 12
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值