为什么 args.add_argument 在两个单独的语句中给出时有效,但在 python 中却无效?

2023-12-22

我正在尝试使用 argparse 模块来解析命令行中的参数。 这是示例代码

import argparse
parser = argparse.ArgumentParser()
parser.add_argument('bar')
parser.add_argument('-foo')
args=parser.parse_args()
print args

运行这个

python argparsing.py "hello"
Namespace(bar='hello', foo=None)

然而,这不起作用

import argparse
parser = argparse.ArgumentParser()
parser.add_argument('bar','--foo')
#parser.add_argument('-foo')
args=parser.parse_args()
print args

运行这个会出现错误

python argparsing.py "hello"
Traceback (most recent call last):
  File "argparsing.py", line 3, in <module>
    parser.add_argument('bar','-foo')
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/argparse.py", line 1267, in add_argument
    kwargs = self._get_optional_kwargs(*args, **kwargs)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/argparse.py", line 1397, in _get_optional_kwargs
    raise ValueError(msg % tup)
ValueError: invalid option string 'bar': must start with a character '-'

两者之间的唯一区别是我在第一个代码中单独添加参数(分两行),但将它们添加到与失败代码中的一个语句相同的行中。 有人可以帮助我更好地理解这一点吗?


add_argument是为了添加一个single争论。'bar'是一个位置参数;'--foo'是一个可选参数。您不能创建一个既是位置又是可选的参数,因此会出现错误。

如果您想定义一个参数,但以不同的方式命名该选项,请使用dest:

# accept an option --foo X, and store X into args.bar
parser.add_argument('--foo', dest='bar')

请注意,您可以为单个可选参数定义多个别名,例如

parser.add_argument('-f', '--foo', '--frobnicate')
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 args.add_argument 在两个单独的语句中给出时有效,但在 python 中却无效? 的相关文章

随机推荐