add_argument函数的default参数

2020年2月18日 / 507次阅读 / Last Modified 2020年2月18日
argparse模块

顾名思义,add_argument函数的default参数,就是用来设定某个命令行参数的默认值的。不过,这里面还是有一些细节要测试一下。

add_argument函数来自python标准库argparse模块的ArgumentParser对象,我们用这个对象来创建命令行界面的程序非常方便。

命令行位置参数配合nargs时的default效果

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('echo', nargs='?', default='123')
args = parser.parse_args()
print(args.echo)

此位置参数配合nargs='?'时,就变成了一个可选的位置参数,默认值是123。运行效果如下:

D:\py>python arg_default.py
123

D:\py>python arg_default.py abc
abc

可选参数的一般用法也是这样的,用位置参数测试,只是想它跟nargs配合时的效果。

如果default值的类型与type不一致

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('--echo', type=int, default='pynote.net')
args = parser.parse_args()
print(args.echo)

运行效果:

D:\py>python arg_default.py --echo abc
usage: arg_default.py [-h] [--echo ECHO]
arg_default.py: error: argument --echo: invalid int value: 'abc'

D:\py>python arg_default.py --echo 888
888

D:\py>python arg_default.py
usage: arg_default.py [-h] [--echo ECHO]
arg_default.py: error: argument --echo: invalid int value: 'pynote.net'

所以,default的值的类型,要与type保持一致。

default值与nargs配置不符

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('--echo', nargs=2, default='888')
args = parser.parse_args()
print(args.echo)

--echo 如果配置,比如配置2个值,而default只是一个简单的字符串。运行效果:

D:\py>python arg_default.py --echo aaa bbb
['aaa', 'bbb']

D:\py>python arg_default.py
888

实践说明,可以这样写代码!

default=argparse.SUPPRESS

这是一个特殊的default值。一般情况,默认的default值是None,当一个可选参数没有在命令行出现时,它的值就是None。如果我们设置default=argparse.SUPPRESS,可选参数没有出现在命令行时,它就是没有定义,不存在的对象。

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('--echo', default=argparse.SUPPRESS)
args = parser.parse_args()
try:
    print(args.echo)
except Exception as e:
    print(repr(e))

我们用try将访问args.echo的代码保护起来,运行效果如下:

D:\py>python arg_default.py --echo 123
123

D:\py>python arg_default.py
AttributeError("'Namespace' object has no attribute 'echo'")

可以看到如果不配置 --echo,args.echo对象就不存在!

-- EOF --

本文链接:https://www.pynote.net/archives/1808

留言区

电子邮件地址不会被公开。 必填项已用*标注


前一篇:
后一篇:

More


©Copyright 麦新杰 Since 2019 Python笔记

go to top