管理没有值的参数

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' 运算符右侧的表达式。我不知道这是否对每个实现都是正确的。