管理没有值的参数
Manage arguments that receive no values
大家好,我正在为我的应用程序编写帮助菜单。代码如下
import argparse
parser = argparse.ArgumentParser(description="Hyla database backup application")
group = parser.add_mutually_exclusive_group()
group.add_argument("-g","--group",type=str,help="defines database groups")
group.add_argument("-a","--all",help="backup all databases",action="store_true")
group.add_argument("-D","--databases",nargs='+',help="take multiple databases as input")
parser.add_argument("-r","--reference",help="backups reference data-only",action="store_true")
args=parser.parse_args()
if args.reference==True:
alpha=True
print alpha
if args.group == "uat":
print args.group
arglist=args.databases
if len(arglist) > 0:
for i in args.databases:
print i
我真正的问题是,如果用户不使用 -D 选项,那么 arglist 的值为 0.I 我正在尝试通过检查 arglist 是否有任何值来处理这个问题,并且仅当 arglist 为非空时才执行后续步骤.但似乎 arglist 的值是空的而不是零,这就是为什么我低于错误
PS G:\pythonargs> python .\args.py -a
Traceback (most recent call last):
File ".\args.py", line 17, in <module>
if len(arglist) > 0:
TypeError: object of type 'NoneType' has no len()
PS G:\pythonargs>
我想根据 arglist.How 中的值执行操作 我能否确保即使用户不使用 -D 选项,arglist 也应该有一些值
您可以将该选项的默认值设置为列表:
group.add_argument("-D","--databases",nargs='+',
default=[],
help="take multiple databases as input")
现在,如果用户不使用 -D
选项,它将是一个空列表,因此您可以使用 len()
测试它的长度或在 for
循环中使用它。
因为 arglist 可以是 None,你可以这样做:
if arglist:
if len(arglist) > 0:
for i in args.databases:
print (i)
并且仅在 arglist 不是 None 时才测试长度。
我将两个测试合并为一个 if 语句,
if arglist and len(arglist) > 0:
之所以有效,是因为 Python 从左到右计算,如果左侧的表达式失败,我使用的实现不会费心计算 'and' 运算符右侧的表达式。我不知道这是否对每个实现都是正确的。
大家好,我正在为我的应用程序编写帮助菜单。代码如下
import argparse
parser = argparse.ArgumentParser(description="Hyla database backup application")
group = parser.add_mutually_exclusive_group()
group.add_argument("-g","--group",type=str,help="defines database groups")
group.add_argument("-a","--all",help="backup all databases",action="store_true")
group.add_argument("-D","--databases",nargs='+',help="take multiple databases as input")
parser.add_argument("-r","--reference",help="backups reference data-only",action="store_true")
args=parser.parse_args()
if args.reference==True:
alpha=True
print alpha
if args.group == "uat":
print args.group
arglist=args.databases
if len(arglist) > 0:
for i in args.databases:
print i
我真正的问题是,如果用户不使用 -D 选项,那么 arglist 的值为 0.I 我正在尝试通过检查 arglist 是否有任何值来处理这个问题,并且仅当 arglist 为非空时才执行后续步骤.但似乎 arglist 的值是空的而不是零,这就是为什么我低于错误
PS G:\pythonargs> python .\args.py -a
Traceback (most recent call last):
File ".\args.py", line 17, in <module>
if len(arglist) > 0:
TypeError: object of type 'NoneType' has no len()
PS G:\pythonargs>
我想根据 arglist.How 中的值执行操作 我能否确保即使用户不使用 -D 选项,arglist 也应该有一些值
您可以将该选项的默认值设置为列表:
group.add_argument("-D","--databases",nargs='+',
default=[],
help="take multiple databases as input")
现在,如果用户不使用 -D
选项,它将是一个空列表,因此您可以使用 len()
测试它的长度或在 for
循环中使用它。
因为 arglist 可以是 None,你可以这样做:
if arglist:
if len(arglist) > 0:
for i in args.databases:
print (i)
并且仅在 arglist 不是 None 时才测试长度。
我将两个测试合并为一个 if 语句,
if arglist and len(arglist) > 0:
之所以有效,是因为 Python 从左到右计算,如果左侧的表达式失败,我使用的实现不会费心计算 'and' 运算符右侧的表达式。我不知道这是否对每个实现都是正确的。