我正在使用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'
答案 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"