【问题标题】:Making Commandline Parameters Optional in Python [duplicate]在Python中使命令行参数可选[重复]
【发布时间】:2014-08-03 05:00:52
【问题描述】:

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

【问题讨论】:

  • Erm...它已经是可选的。事实上,即使没有指定 --quality 选项,您编写的代码也会运行。您可以使用 default 关键字参数指定默认值。
  • @Luigi 这个问题是关于使位置参数成为可选的。正如 Bakuriu 所指出的,以 - 开头的参数已经是可选的。
  • 我添加了我遇到的错误。
  • 默认值为None。您需要更改默认值或编写可以处理None 的代码。
  • 我喜欢在使用argparse 开发时包含print(args)。在这种情况下,它会清楚地显示quality=None

标签: python command-line-arguments argparse


【解决方案1】:

我想你想要:

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

将类型指定为 int 并指定所需的默认值。你遇到的问题是因为你没有给参数一个默认值(通过default关键字参数)所以如果它没有在命令行上指定它默认为None,它是int(质量)正在窒息。将上面的type 设置为int 可以完全避免进行int() 转换。

【讨论】:

  • 谢谢!效果很好:-)
【解决方案2】:

直接来自帮助文档,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"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-08
    • 2015-07-05
    • 2018-03-03
    • 1970-01-01
    • 2020-01-01
    • 2012-10-06
    • 1970-01-01
    相关资源
    最近更新 更多