在Python中使命令行参数可选

时间:2014-06-12 18:42:36

标签: python command-line-arguments argparse

我正在使用ArgParse在Python中提供命令行参数。

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然后运行了这个:

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

即使没有提供命令行参数,我也希望我的代码能够运行。我想让它成为可选项。如果提供了它,那么它需要一个特定的值,可以进一步使用。

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

 if int(quality)==10:

所以如果我没有参数运行:

 $ python a.py

我收到此错误:

TypeError:int()参数必须是字符串或数字,而不是'NoneType'

2 个答案:

答案 0 :(得分:4)

我想你想要:

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

将类型指定为int并指定所需的默认值。您遇到的问题是因为您没有为参数提供默认值(通过default关键字参数),因此如果未在命令行中指定它,则默认为None, int(质量)令人窒息。将type设置为int可以避免需要进行int()投射。

答案 1 :(得分:0)

直接来自帮助文档read that first

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

以下是您问题的解决方案

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"