关于命令行参数:使命令行参数在Python中可选

Making Commandline Parameters Optional in Python

本问题已经有最佳答案,请猛点这里访问。

我使用argparse在python中提供命令行参数。

1
2
3
4
5
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--quality", help="enter some quality limit")
args = parser.parse_args()
print"You gave quality = %s" % str(args.quality)

我把这个保存为a.py,然后运行这个:

1
2
$ python a.py --quality 10
You gave quality = 10

我还希望我的代码运行,即使没有提供commandline参数。我希望它是可选的。如果提供了commandline参数,那么它需要一个特定的值,可以进一步使用。

我的代码中有这样的内容:

1
 if int(quality)==10:

所以如果我不带参数运行:

1
 $ python a.py

我得到这个错误:

typeerror:int()参数必须是字符串或数字,而不是"nonetype"


我想你想要:

1
2
3
4
parser.add_argument("--quality",
                    type=int,
                    default=10,
                    help="enter some quality limit")

将类型指定为int并指定所需的默认值。您遇到的问题是,您没有给参数一个默认值(通过default关键字参数),所以如果在命令行上没有指定,它将默认为None,而int(质量)将被阻塞。将上述type设置为int,根本不需要执行int()强制转换。


直接从帮助文档中,首先阅读:

1
2
3
4
5
6
7
8
9
10
11
12
13
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("square", type=int, help="display a square of a given number")
parser.add_argument("-v","--verbosity", type=int,
                    help="increase output verbosity")
args = parser.parse_args()
answer = args.square**2
if args.verbosity == 2:
    print"the square of {} equals {}".format(args.square, answer)
elif args.verbosity == 1:
    print"{}^2 == {}".format(args.square, answer)
else:
    print answer

这是你问题的答案

1
2
3
4
5
6
7
8
9
10
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--quality", help="enter some quality limit")
args = parser.parse_args()
if args.quality: #Optional parameter
    #act if it was provided
    print"You gave quality = %s" % str(args.quality)
else:
    #what to do if it wasn't provided
    print"You failed to provide a quantity"