无法识别argparse子参数

2024-04-29 14:27:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下测试代码:

import argparse
myparser = argparse.ArgumentParser(prog='test')
myparser.add_argument('mode', choices=['A', 'B'])
subparsers = myparser.add_subparsers()
a_parser = subparsers.add_parser('A')
b_parser = subparsers.add_parser('B')
a_parser.add_argument('frog',action='store')
b_parser.add_argument('toad',action='store')
print(myparser)
try:
    args = myparser.parse_args(['A', 'frogname'])
    print(args)
except ArgumentError as ae:
    print(ae)

当我运行它时,我得到以下信息:

ArgumentParser(prog='test', usage=None, description=None, formatter_class=<class 'argparse.HelpFormatter'>, conflict_handler='error', add_help=True)
usage: test [-h] {A,B} {A,B} ...
test: error: invalid choice: 'frogname' (choose from 'A', 'B')

我不知道为什么我得到多个'mode'参数的副本,或者为什么我的子参数被忽略


Tags: storetestaddparsermyparsermodeargparseargs
1条回答
网友
1楼 · 发布于 2024-04-29 14:27:04

如果您使用mode来尝试选择子parser,则不需要这样做。这是add_parser()为你做的一部分

myparser = argparse.ArgumentParser(prog='test')
# myparser.add_argument('mode', choices=['A', 'B'])  # Don't think you need this
subparsers = myparser.add_subparsers()
a_parser = subparsers.add_parser('A')
b_parser = subparsers.add_parser('B')
a_parser.add_argument('frog',action='store')
b_parser.add_argument('toad',action='store')

args = myparser.parse_args(['A', 'frogname'])
print(args)
>>> Namespace(frog='frogname')

如果mode是除了选择子parser之外还需要设置的独立的东西,那么需要单独传递该参数

myparser = argparse.ArgumentParser(prog='test')
myparser.add_argument('mode', choices=['A', 'B'])
subparsers = myparser.add_subparsers()
a_parser = subparsers.add_parser('A')
b_parser = subparsers.add_parser('B')
a_parser.add_argument('frog',action='store')
b_parser.add_argument('toad',action='store')

args = myparser.parse_args(['A', 'A', 'frogname'])
print(args)
>>> Namespace(frog='frogname', mode='A')

相关问题 更多 >