我正在尝试根据函数返回的某些值添加命令行参数。当我不提出这个论点时,它说:
main.py: error: argument -opp/--operator is required
当我发表论据时,它说:
main.py: error: unrecognized arguments: -opp +
以下是一段EDITED代码(如其中一个答案中所述):
parser.add_argument('-z', help='Help msg', required=True)
args, unknown = parser.parse_known_args()
value = some_functions(args.z)
if value == some_particular_value:
parser.add_argument('-opp','--operator',help='Some help msg',required=True)
args = parser.parse_args()
请帮我添加这个论点。谢谢!
答案 0 :(得分:2)
但是,您的代码中存在一些错误。这是更正后的版本:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-z', help = 'Help msg', required = True)
args, _ = parser.parse_known_args()
# value = some_functions(args.z)
if value == some_particular_value:
parser.add_argument('-opp', '--operator', help = 'Some help msg', required = True)
# args2, _ = parser.parse_known_args()
# some_function2(args2.operator)
所以,让我们分析你的错误:
这是典型的新手错误。在条件运算符(if
,case
...)中,您设置值,而不是检查。不同之处在于=
符号的数量。
如果指定值,则运算符中的条件将始终为True
,并且测试将始终成功(在大多数编程语言和案例中)。
检查出来:
a = 1
if a = 2:
print a
这个可能以某些语言(如C或Java;使用正确的语法)打印2
。为什么?你刚刚设定它!然而,Python足够聪明地告诉你你的错误:
File "<stdin>", line 1
if a = 2:
^
SyntaxError: invalid syntax
并将其与此进行比较:
a = 1
if a == 2:
print a
这不会打印任何内容。因为if
测试未通过。
您希望使用方法add_argument
而不是重新定义parser
变量,对吗?
parser = add_argument(...)
这就像我上面所描述的那样。您应该调用parser
变量的方法,而不是定义其新值:
parser.add_argument(...)
您没有显示检查operator
参数的代码部分。注意:在定义新参数时,您应该再次解析参数:
parser.add_argument(...)
args, _ = parser.parse_known_arguments()
然后,您将在args
变量中获得一个新参数。
同样,您缺少部分代码,在那里检查operator
参数'值。如果您尝试使用
args.opp # whoops...
然后你会收到一条错误There's no argument 'opp'!
,因为它有全名,应该用它来访问:
args.operator # aaah, here it is!