收到错误
"错误:无法识别的参数:"
对于尝试构建自己的命令行参数时的内置参数。我将我的论点定义为:
import argparse
def fn_a(parsed_args):
print("hello i am in function fn_a")
def fn_b(parsed_args):
print("hello i am in function fn_b")
parser=argparse.ArgumentParser(description="my first arg scripting")
parser.add_argument('--a', dest='action', action='store_const',const=fn_a)
parser.add_argument('--b', dest='action', action='store_const', const=fn_b)
parsed_args = parser.parse_args()
if parsed_args.action is None:
parser.parse_args(['-h'])
parsed_args.action(parsed_args)
可能是什么问题?
答案 0 :(得分:0)
您可以更改代码以使用try-except块并仅解析已知参数,例如:
try:
parsed_args, unknown_args = parser.parse_known_args()
except:
parsed_args = None
if parsed_args and parsed_args.action:
parsed_args.action(parsed_args)
else:
try:
parser.parse_known_args(['-h'])
except:
pass
答案 1 :(得分:0)
将最后一位更改为:
if parsed_args.action is None:
parser.parse_args(['-h'])
parsed_args.action(parsed_args)
让我这样做:
1218:~/mypy$ python stack42067791.py
usage: stack42067791.py [-h] [--a] [--b]
my first arg scripting
optional arguments:
-h, --help show this help message and exit
--a
--b
1218:~/mypy$ python stack42067791.py --a
hello i am in function fn_a
1218:~/mypy$ python stack42067791.py --b
hello i am in function fn_b
1218:~/mypy$ python stack42067791.py -h
usage: stack42067791.py [-h] [--a] [--b]
my first arg scripting
optional arguments:
-h, --help show this help message and exit
--a
--b
即它响应--a
和--b
,如果两者都没有提供,则复制-h
。
其他任何内容都会产生带有用法的标准argparse错误消息
1218:~/mypy$ python stack42067791.py foo
usage: stack42067791.py [-h] [--a] [--b]
stack42067791.py: error: unrecognized arguments: foo
1220:~/mypy$ python stack42067791.py --b foo
usage: stack42067791.py [-h] [--a] [--b]
stack42067791.py: error: unrecognized arguments: foo
使用parse_known_args
可以在最后一种情况下丢弃foo
。但是你为什么要那样做?
parsed_args,extras = parser.parse_known_args()
print(parsed_args, extras)
打印像
这样的东西(Namespace(action=None), [])
(Namespace(action=<function fn_b at 0xb71f1b54>), ['foo'])
(Namespace(action=<function fn_a at 0xb744d25c>), [])