大家好我正在为我的应用程序编写帮助菜单。代码如下
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.我正在尝试通过检查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中的值执行操作。我如何确保即使用户不使用-D选项,arglist也应该有一些值
答案 0 :(得分:0)
您可以将该选项的默认值设置为列表:
group.add_argument("-D","--databases",nargs='+',
default=[],
help="take multiple databases as input")
现在,如果用户没有使用-D
选项,那么它将是一个空列表,因此您可以使用len()
测试它的长度,或者在for
中使用它循环。
答案 1 :(得分:0)
由于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从左到右进行评估,我使用的实现并不打算评估&#39;和&#39;右侧的表达式。运算符,如果左侧的表达式失败。我不知道每次实施是否都是如此。